gpt4 book ai didi

ruby-on-rails - 使用 CanCan 通过父关联授权子对象

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:34 25 4
gpt4 key购买 nike

我们可以根据父对象的关联检查子对象的权限吗?

我在 Group(父级)和 User 之间有一个多对多关联(参见下面的关联),通过 Membership (该协会)。我有一个属于 GroupUserEvent(子)模型。 Membership 有一个名为 role 的列,这就是我想要的权限基础。

我想确保用户只有在用户所有者时才能创建事件 event 所属的 groupowner 我的意思是有 Membership.where(user_id: user, group_id: group, role: 'admin') 记录。

文档在 Accessing Parent in Ability 下提到了这一点, 但他们没有提到通过协会。

# in Ability
can :manage, Task, :project => { :user_id => user.id }

将该示例转换为我的用例:

# in Ability
can :create, Event, :group => { group.owner == user }

我已经有一个 group.owner 设置:

class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group, inverse_of: :memberships
end

class User < ActiveRecord::Base
has_many :memberships
has_many :groups, through: :memberships

has_many :ownerships, class_name: 'Membership', conditions: { role: 'admin' }
has_many :owned_groups, through: :ownerships, source: :group

has_many :events
end

class Group < ActiveRecord::Base
has_many :memberships
has_many :users, through: :memberships

has_one :ownership, class_name: 'Membership', conditions: { role: 'admin' }
has_one :owner, through: :ownership, source: :user

has_many :events
end

class Event < ActiveRecord::Base
belongs_to :organizer, class_name: 'User', foreign_key: 'user_id'
belongs_to :group
end

知道怎么做吗?

最佳答案

听起来您的权限应该基于组:

can :create_events, Group, owner_id: user.id

您是否为团体和事件使用嵌套路线?

编辑:

can :create_events, Group, owner: { id: user.id }

关于ruby-on-rails - 使用 CanCan 通过父关联授权子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12885246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com