[如果用户可以管理组,则可以创建邀请资源的能力

问题描述 投票:0回答:2

我定义了以下小组能力:

# Group abilities
can :manage, Group do |group|
  user.in_group?(group, as: :owner)
end

我想要邀请函是这样的:

can :manage, Invite do |invite|
  can?(:manage, invite.group)
end

换句话说,我希望支持能够为其所拥有的组创建邀请的用户。由于组可以有多个所有者(通过GroupMemberships对象),所以我不能使用简单的关联哈希规则。我也不能使用块,因为@invite中没有InvitesController#create的实例。

您将如何为这种情况编写能力规则?

ruby-on-rails authorization cancancan
2个回答
0
投票

如果我了解您和正确提供的少量代码,则可以通过以下方式实现:

can :manage, Invite do |invite|
  user.in_group?(invite.group, as: :owner)
end

0
投票
can :manage, Invite, group: { group_memberships: { user: user, membership_type: 'owner' } }

是在控制器中具有以下CanCanCan钩子的最终为create动作工作的功能:

class InvitesController < ApplicationController
  load_and_authorize_resource :group
  authorize_resource :invite, through: :group
© www.soinside.com 2019 - 2024. All rights reserved.