我正在尝试使用 declarative_authorization 保护 Rails3 控制器。
该控制器具有 7 个 RESTful 操作、三个自定义成员操作(激活、停用、复制)和一个自定义收集操作(公共)。但是,“public”操作仅返回一条记录。
只有自定义收集操作(公共)对经过身份验证的用户可用;其余的仅对 current_user 可用。
has_permission_on :foos, :to => :public
has_permission_on :foos, :to => [:full_control, :copy, :activate, :deactivate] do
if_attribute :user => is {user}
end
privilege :full_control, :includes => [:index, :show, :new, :create, :edit, :update, :destroy]
在 routes.rb 文件中定义了 4 个自定义操作:
resources :users do
resources :foos do
collection do
get :public
end
member do
post :activate, :copy, :deactivate
end
end
end
一个用户:has_many Foos; 一个 Foo :belongs_to 一个用户。
FoosController 中定义的“标准”访问控制 (filter_resource_access :nested_in => :user) 似乎控制对 7 个 RESTful 操作的访问,但无法控制对其他 4 个操作的访问(如预期的那样)。
当我将 FooController 更改为:
filter_access_to :all, :nested_in => :users, :attribute_check => true
我收到一条错误消息,内容为“找不到没有 ID 的 Foo”。
问题:
- 文档似乎建议在使用 filter_access_to 时会自动调用 :before_filter 来加载 Foo 模型。我弄错了吗?我需要对 filter_access_to 进行额外配置吗?我是否需要手动配置:before_filter?
- 为了我的目的,我是否还需要将 using_access_control 添加到模型中?当控制器中有访问控制时,我有点不清楚何时需要向模型添加访问控制。
- 文档描述了一个名为“create”的权限——它被定义为:privilege :create, :includes => :new。此外,对于 :new 操作,此权限是否会自动包含 :create 操作作为其名称的结果?
- 如果更改了 authentication_rules.rb 文件,是否需要重新启动服务器才能应用新规则?