gpt4 book ai didi

ruby-on-rails - CanCan 联想能力

转载 作者:行者123 更新时间:2023-12-01 22:08:05 27 4
gpt4 key购买 nike

我的问题是关于在以下上下文中定义 cancancan 能力。

我有一个通用模型,其中包含用户和公司实体之间的多对多关系

class User < ApplicationRecord
has_many :company_users, dependent: :destroy
has_many :companies, through: :company_users
enum role:[:user, :admin, :superadmin]
end

class Company < ApplicationRecord
has_many :company_users, dependent: :destroy
has_many :users, through: :company_users
end

class CompanyUser < ApplicationRecord
belongs_to :company
belongs_to :user
end

我现在想定义康康能力,以授权当前用户管理与他属于同一公司的所有用户。

我对像这样的其他多对多模式(例如:设备和公司之间的多对多)没有问题

can :manage, Device, :companies => {:users => {:id => user.id}}

工作正常!

但是

can :manage, User, :companies => {:users => {:id => user.id}}

当然,让我只看当前用户,因为它在同一个用户表上。

我如何才能轻松地管理属于同一公司的用户之间的这种能力,从而保持多对多关系?

谢谢你的帮助

最佳答案

您可以使用范围解决问题:https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities-with-Blocks#block-conditions-with-scopes

和定义:

can :manage, User, User.joins(companies: :users).where(companies: { users: { id: user.id } })

请查看完整要点:https://gist.github.com/coorasse/f1174b618651fcee8c65525d38b36120

关于ruby-on-rails - CanCan 联想能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50392807/

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