【问题标题】:CanCan nested routesCanCan 嵌套路由
【发布时间】:2014-02-11 05:24:45
【问题描述】:

我的路线中有嵌套在公司下的代码。

资源:公司,除了:[:destroy] 做 资源:代码,除了:[:destroy] 结束

能力:

can :read, Company do |c|
   user.has_role? :operator, c
end

can :read, Code do |c|
  user.has_role? :operator, code.company
 end

我的 CodesController 检查

before_filter :set_code, only: [:show, :edit, :update, :activate, :deactivate]
  load_and_authorize_resource :except => :create #TODO fix as cancan updates
     def index
       if params[:company_id]
       ...

如果我访问 /companies/1/codes(我的用户不应访问),我看不到任何结果。但是,如果我尝试直接查看 /companies/1,我会得到 CanCan AccessDenied。

为什么嵌套索引中没有显示?

【问题讨论】:

    标签: ruby-on-rails devise cancan rolify


    【解决方案1】:

    您还应该在代码控制器中对父模型执行 load_and_authorize_resource:

    load_and_authorize_resource :company
    

    然后通过您的公司加载您的代码资源:

    load_and_authorize_resource :company
    load_and_authorize_resource :code, through: :company
    

    我在您的 before_filter 中看不到任何附加值,因为这正是 CanCan 将为您做的...

    【讨论】:

    • 谢谢。我要接受,这行得通。如何设置 /companies 在哪里显示管理员的所有公司,以及只为用户显示属于用户的公司?
    • 这是您通常在技能文件中设置的内容。默认情况下,管理员可以看到所有内容。正如您现在设置的那样,用户将看到他担任“操作员”角色的公司
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2011-10-10
    • 2018-05-29
    • 2017-10-31
    • 2019-03-13
    • 2015-05-22
    • 2013-01-16
    相关资源
    最近更新 更多