has_and_belongs_to_many 协会的 CanCanCan 权限
CanCanCan permissions for has_and_belongs_to_many association
我在用户和客户之间有 has_and_belongs_to_many 关联。 Table 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
我的 ability.rb
中需要这样的东西
user ||= User.new # guest user (not logged in)
can :read, :all
can :manage, Client, :clients_users => { :user_id => user.id }
所以我只能在 clients_users table 中有一条带有 user_id 和此客户端 ID 的记录时才能管理客户端。我如何让它发挥作用?
当您使用 has_and_belongs_to_many
时,您将无法访问连接模型,因为没有连接模型,如果您想要访问它,则需要改为执行 has_many :through
。
但在您的情况下,您实际上并不需要访问连接模型,因为 Client
具有 users
属性,而 User
具有 clients
属性,那么为什么不直接使用它呢:
我认为这样的事情应该可行
can :manage, Client, id: user.clients.pluck(:id)
我在用户和客户之间有 has_and_belongs_to_many 关联。 Table 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
我的 ability.rb
中需要这样的东西user ||= User.new # guest user (not logged in)
can :read, :all
can :manage, Client, :clients_users => { :user_id => user.id }
所以我只能在 clients_users table 中有一条带有 user_id 和此客户端 ID 的记录时才能管理客户端。我如何让它发挥作用?
当您使用 has_and_belongs_to_many
时,您将无法访问连接模型,因为没有连接模型,如果您想要访问它,则需要改为执行 has_many :through
。
但在您的情况下,您实际上并不需要访问连接模型,因为 Client
具有 users
属性,而 User
具有 clients
属性,那么为什么不直接使用它呢:
我认为这样的事情应该可行
can :manage, Client, id: user.clients.pluck(:id)