0

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

资源:公司,除了:[: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。

为什么这不显示在嵌套索引中?

4

1 回答 1

0

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

load_and_authorize_resource :company

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

load_and_authorize_resource :company
load_and_authorize_resource :code, through: :company

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

于 2014-02-11T06:02:25.393 回答