Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 声明性授权筛选器\u访问\u_Ruby On Rails 3_Declarative Authorization - Fatal编程技术网

Ruby on rails 3 声明性授权筛选器\u访问\u

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,

我正在尝试使用声明性授权保护Rails3控制器

控制器有7个RESTful操作、三个自定义成员操作(激活、停用、复制)和一个自定义收集操作(公共)。然而,“public”操作只返回一条记录

只有自定义收集操作(公共)应可供经过身份验证的用户使用;其余部分仅对当前用户可用

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”

问题:

  • 文档似乎建议在使用filter\u access\u to时自动调用:before\u filter来加载Foo模型。我弄错了吗?我是否需要附加的过滤器访问配置?我是否需要手动配置a:before\u过滤器
  • 出于我的目的,我是否还需要将using_access_control添加到模型中?当控制器中存在访问控制时,我有点不清楚何时需要向模型添加访问控制
  • 文档描述了一个名为“create”的特权——它被定义为:privilege:create,:includes=>:new。此外,除了:new操作之外,此权限是否自动包括:create操作作为其名称的结果
  • 如果更改了authentication_rules.rb文件,是否需要重新启动服务器才能应用新规则

  • 我认为自动前过滤器,如果存在的话,是相当有限的。我总是要根据上下文编写自己的前置过滤器。例如——对于索引视图,除非对模型的所有实例的权限相同,否则需要有一个适合当前上下文的模型实例。就像用户查看文章索引一样,您可能希望为用户创建一个虚拟的新文章,或者加载他们的第一篇文章,但是虚拟的更安全,因为第一篇文章可能不存在。一般来说,我有一个用于索引的虚拟构造函数,其他一切都可以测试实际要看到(或触摸)的内容

    到目前为止,控制器对我来说已经足够好了,所以肯定不需要模型级别。这并不是说它不会增加额外的安全性,但我不知道什么时候这会变得重要。我假设当你有一个模型被许多控制器(如无模型控制器)触摸,你想确保没有任何东西从中溜走

    我没有使用特权,所以我不确定,但我猜你描述的魔法继承不会发生。创建未被特别请求的权限似乎是一种非常草率的方法


    不,不需要重新启动——至少不在开发模式下。

    我认为自动前置过滤器(如果存在的话)非常有限。我总是要根据上下文编写自己的前置过滤器。例如——对于索引视图,除非对模型的所有实例的权限相同,否则需要有一个适合当前上下文的模型实例。就像用户查看文章索引一样,您可能希望为用户创建一个虚拟的新文章,或者加载他们的第一篇文章,但是虚拟的更安全,因为第一篇文章可能不存在。一般来说,我有一个用于索引的虚拟构造函数,其他一切都可以测试实际要看到(或触摸)的内容

    到目前为止,控制器对我来说已经足够好了,所以肯定不需要模型级别。这并不是说它不会增加额外的安全性,但我不知道什么时候这会变得重要。我假设当你有一个模型被许多控制器(如无模型控制器)触摸,你想确保没有任何东西从中溜走

    我没有使用特权,所以我不确定,但我猜你描述的魔法继承不会发生。创建未被特别请求的权限似乎是一种非常草率的方法


    不,不需要重新启动——至少不在开发模式下。

    您找到这些问题的答案了吗?我也面临着类似的问题。你找到这些问题的答案了吗?我也面临着类似的问题。