2014-02-11 279 views
0

我有代码嵌套在公司在我的路线。CanCan嵌套路由

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

能力:

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] 
     ... 

如果我访问/公司/ 1 /代码,我的用户应该无法访问,我看不到任何结果。但是,如果我尝试直接查看/ companies/1,则会得到CanCan AccessDenied。

为什么不显示嵌套索引?

回答

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会为你做的...

+0

谢谢。我会接受,这是有效的。我如何设置公司显示管理员的所有公司的位置以及公司显示的用户所属的公司? – quantumpotato

+0

这是你通常在能力文件中设置的东西。默认情况下,管理员可以看到一切。正如您现在设置的那样,用户将看到他拥有角色“运营商”的公司 – Danny