跳过某些方法的授权

时间:2010-04-25 17:51:06

标签: ruby-on-rails authorization filter

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

问题在于我希望所有人能够访问new方法,例如,在用户中(也就是说,任何人都应该能够创建新用户 - 自然!只有管理员用户才能访问UsersController中的其他方法,例如edit等。最好的方法是什么?

3 个答案:

答案 0 :(得分: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 :(得分:3)

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

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

- 仅针对用户控制器中的:authorizenew操作跳过名为create的前置过滤器,即过滤器仍会应用于所有其他操作。

答案 2 :(得分:0)

我还建议使用CanCan gem进行授权,因为它有一种非常简单和干净的方式来定义授权规则。 http://github.com/ryanb/cancan