代码之家  ›  专栏  ›  技术社区  ›  craig

声明性授权筛选器\u访问\u

  •  2
  • craig  · 技术社区  · 14 年前

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

    只有自定义收集操作(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]
    

    中定义了4个自定义操作路由.rb文件:

    resources :users do
      resources :foos do
        collection do 
          get :public
        end
        member do
          post :activate, :copy, :deactivate
        end
      end
    end
    

    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”。

    问题:

    1. 文档似乎建议在使用filter\u access\u to时自动调用a:before\u filter来加载Foo模型。我弄错了吗?我需要额外的过滤器配置吗?我是否需要手动配置a:before\ u filter?
    2. 出于我的目的,我是否还需要将using\u access\u control添加到模型中?当控制器中有访问控制时,我不太清楚什么时候需要向模型添加访问控制。
    3. 文档描述了一个名为“create”的特权,它被定义为:privilege:create,:includes=>:new。此外,对于:new操作,此权限是否自动包含:create操作作为其名称的结果?
    4. 如果身份验证_规则.rb文件已更改,是否需要重新启动服务器才能应用新规则?
    1 回复  |  直到 14 年前
        1
  •  0
  •   elc    12 年前

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

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

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