Ruby on rails 3 声明性授权筛选器\u访问\u
我正在尝试使用声明性授权保护Rails3控制器 控制器有7个RESTful操作、三个自定义成员操作(激活、停用、复制)和一个自定义收集操作(公共)。然而,“public”操作只返回一条记录 只有自定义收集操作(公共)应可供经过身份验证的用户使用;其余部分仅对当前用户可用Ruby on rails 3 声明性授权筛选器\u访问\u,ruby-on-rails-3,declarative-authorization,Ruby On Rails 3,Declarative Authorization,我正在尝试使用声明性授权保护Rails3控制器 控制器有7个RESTful操作、三个自定义成员操作(激活、停用、复制)和一个自定义收集操作(公共)。然而,“public”操作只返回一条记录 只有自定义收集操作(公共)应可供经过身份验证的用户使用;其余部分仅对当前用户可用 has_permission_on :foos, :to => :public has_permission_on :foos, :to => [:full_control, :copy, :activate,
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
用户:有很多食物;Foo:属于用户
FoosController中定义的“标准”访问控制(filter\u resource\u access:nested\u in=>:user)似乎控制对7个RESTful操作的访问,但无法控制对其他4个操作的访问(如预期)
当我将FooController更改为:
filter_access_to :all, :nested_in => :users, :attribute_check => true
我得到一个错误,显示为“找不到没有ID的Foo”
问题:
我认为自动前过滤器,如果存在的话,是相当有限的。我总是要根据上下文编写自己的前置过滤器。例如——对于索引视图,除非对模型的所有实例的权限相同,否则需要有一个适合当前上下文的模型实例。就像用户查看文章索引一样,您可能希望为用户创建一个虚拟的新文章,或者加载他们的第一篇文章,但是虚拟的更安全,因为第一篇文章可能不存在。一般来说,我有一个用于索引的虚拟构造函数,其他一切都可以测试实际要看到(或触摸)的内容 到目前为止,控制器对我来说已经足够好了,所以肯定不需要模型级别。这并不是说它不会增加额外的安全性,但我不知道什么时候这会变得重要。我假设当你有一个模型被许多控制器(如无模型控制器)触摸,你想确保没有任何东西从中溜走 我没有使用特权,所以我不确定,但我猜你描述的魔法继承不会发生。创建未被特别请求的权限似乎是一种非常草率的方法
不,不需要重新启动——至少不在开发模式下。我认为自动前置过滤器(如果存在的话)非常有限。我总是要根据上下文编写自己的前置过滤器。例如——对于索引视图,除非对模型的所有实例的权限相同,否则需要有一个适合当前上下文的模型实例。就像用户查看文章索引一样,您可能希望为用户创建一个虚拟的新文章,或者加载他们的第一篇文章,但是虚拟的更安全,因为第一篇文章可能不存在。一般来说,我有一个用于索引的虚拟构造函数,其他一切都可以测试实际要看到(或触摸)的内容 到目前为止,控制器对我来说已经足够好了,所以肯定不需要模型级别。这并不是说它不会增加额外的安全性,但我不知道什么时候这会变得重要。我假设当你有一个模型被许多控制器(如无模型控制器)触摸,你想确保没有任何东西从中溜走 我没有使用特权,所以我不确定,但我猜你描述的魔法继承不会发生。创建未被特别请求的权限似乎是一种非常草率的方法
不,不需要重新启动——至少不在开发模式下。您找到这些问题的答案了吗?我也面临着类似的问题。你找到这些问题的答案了吗?我也面临着类似的问题。