簡體   English   中英

has_and_belongs_to_many關聯的CanCanCan權限

[英]CanCanCan permissions for has_and_belongs_to_many association

我在用戶和客戶端之間具有has_and_belongs_to_many關聯。 表clients_users具有用戶和客戶端的索引。 我的模型是:

class User < ActiveRecord::Base
  rolify
  has_and_belongs_to_many :clients
end

class Client < ActiveRecord::Base
  resourcify
  has_and_belongs_to_many :users
end

我的控制器是:

class Admin::ClientsController < ApplicationController
  load_and_authorize_resource
end

class Admin::UsersController < ApplicationController
  load_and_authorize_resource
end

我的能力需要這樣的東西

user ||= User.new # guest user (not logged in)

can :read, :all
can :manage, Client, :clients_users => { :user_id => user.id }

因此,僅當clients_users表中的記錄具有此客戶端的user_id和id時,我才能管理客戶端。 我該如何運作?

當您使用has_and_belongs_to_many時,您has_and_belongs_to_many訪問has_and_belongs_to_many模型,這僅僅是因為沒有has_and_belongs_to_many模型,如果要訪問該has_and_belongs_to_many模型,則需要執行has_many :through

但是在您的情況下,您實際上並不需要訪問連接模型,因為Client有一個users屬性,而User有一個clients屬性,所以為什么不使用它呢?

我認為這樣的事情應該起作用

can :manage, Client, id: user.clients.pluck(:id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM