【问题标题】:Authorization fails using nested resources in CanCan在 CanCan 中使用嵌套资源授权失败
【发布时间】:2013-10-22 16:50:13
【问题描述】:

我有一个模型组和一个模型人。一个人属于一个组,一个组有_很多人。它们是嵌套资源。根据this page,在 PeopleController 中授权应该足够了:

load_and_authorize_resource :group
load_and_authorize_resource :person, :through => :group

我明确没有添加了直接管理人员的能力,但这暗示这不是必需的,因为它是通过集团获得授权的。授权在 Group 模型上正常工作,但在 Person 上失败。

我可以通过添加这个技能来解决这个问题:

can :manage, Person, :group => { :user_id => user.id }

但是,文档再次指出,尽管这样做是一个“好主意”(为什么?),但授权并不需要。

如果您能提供任何帮助,我将不胜感激!

【问题讨论】:

    标签: ruby-on-rails devise cancan


    【解决方案1】:

    我建议你用方块来定义能力。

    can :manage, Person do |person|
      person.group.user_id == user.id
    end
    

    这对我来说比在嵌套资源中使用散列定义能力更好。试试吧!

    【讨论】:

    • 但是根据文档,我根本不需要为 Person 定义能力,因为它是通过 Group 授权的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多