我定义了以下小组能力:
# 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
的实例。
您将如何为这种情况编写能力规则?
如果我了解您和正确提供的少量代码,则可以通过以下方式实现:
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钩子的最终为create动作工作的功能:
class InvitesController < ApplicationController
load_and_authorize_resource :group
authorize_resource :invite, through: :group