2010-04-25 78 views
4

根据敏捷开发书,我有一个Admin MVC控制着用户如何登录。在ApplicationController中,我有一个before_filter来检查授权。因此,这将检查用户是否每登录页面登录跳过某些方法的授权

的问题是,我想每个人都能够访问new方法,例如,在用户(也就是任何人都应该能够创建一个新用户 - 当然只有管理员用户应该有机会到UsersController中的其他方法,如edit等)。什么是最好的方式来做到这一点?

回答

5

你可以这样

before_filter :except=>[:method_name] #methods you want to skip filter 

OR

before_filter :only=>[:method_name] #methods you want to be filtered before called. 

EDITED

before_filter :filter_method, :except=>[:method_name] #methods you want to skip filter 

OR

before_filter :filter_method, :only=>[:method_name] #methods you want to be filtered before called. 
+1

如果此过滤器是在ApplicationController中指定的,那么它将只应用于所有子控制器中的那些方法。 – 2010-04-25 18:52:59

+0

@john before_filter:在UsersController中授权,:except => [:new,:create]也可以。 – Salil 2010-04-25 18:59:51

+0

@John尼斯..我没有意识到,哈哈。 – jonasespelita 2010-04-26 00:44:25

3

您可以在子控制器类中使用skip_before_filter方法来跳过默认的过滤器处理。例如:

class UsersController < ApplicationController 
    skip_before_filter :authorize, :only => [:new, :create] 
end 

—将跳过只为控制器即过滤器仍然会得到适用于所有其他操作的用户中newcreate行动命名为:authorize的前过滤器。