如果用户可以管理组,则 CanCanCan 能够创建邀请资源

CanCanCan ability to create Invite resource if User can manage Group

我定义了以下组能力:

# 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 对象),我不能使用简单的关联哈希规则。我也不能使用块,因为 InvitesController#create.

中没有 @invite 的实例

你会如何为这种情况编写能力规则?

如果我理解您的意思并且正确提供了少量代码,您可以通过以下方式完成:

can :manage, Invite do |invite|
  user.in_group?(invite.group, as: :owner)
end
can :manage, Invite, group: { group_memberships: { user: user, membership_type: 'owner' } }

是最终在控制器中使用以下 CanCanCan 挂钩为创建操作工作的能力:

class InvitesController < ApplicationController
  load_and_authorize_resource :group
  authorize_resource :invite, through: :group