P.B*_*Bra 2 many-to-many ruby-on-rails associations cancan cancancan
我的问题是关于在以下上下文中定义 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
Run Code Online (Sandbox Code Playgroud)
我现在想定义 cancan 能力,以便授权当前用户管理与他属于同一公司的所有用户。
我对其他多对多模式(例如:设备和公司之间的多对多)没有问题
can :manage, Device, :companies => {:users => {:id => user.id}}
Run Code Online (Sandbox Code Playgroud)
工作正常!
但
can :manage, User, :companies => {:users => {:id => user.id}}
Run Code Online (Sandbox Code Playgroud)
让我看看,当然,只有当前用户,因为它在同一个用户表上。
如何轻松管理属于同一公司的用户之间的这种能力,并保留多对多关系?
谢谢你的帮助
您可以使用范围解决问题: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 } })
Run Code Online (Sandbox Code Playgroud)
请查看完整要点:https : //gist.github.com/coorasse/f1174b618651fcee8c65525d38b36120