如果用户可以管理组,则 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
我定义了以下组能力:
# 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