2016-10-19 54 views
0

我的用例是,如果用戶有角色:agency,他可以看到客戶。但我必須使用客戶和機構之間的鏈接來驗證這一點。看看下面的代碼:如何配置專家顯示屬於父母債券

class Agency < ApplicationRecord 
    has_many :agency_clients 
    has_many :clients, through: :agency_clients 

    resourcify 
end 

class AgencyClient < ActiveRecord::Base 
    belongs_to :agency 
    belongs_to :client 
end 

class Client < ApplicationRecord 
    has_many :agency_clients 
    has_many :agencies, through: :agency_clients 

    resourcify 
end 


class ClientPolicy < ApplicationPolicy 
    def show? 
    user.has_role?(:admin) || user.has_role?(:client, record) 
    end 

    class Scope < Scope 
    def resolve 
     if user.has_role? :admin 
     scope.all 
     elsif user.has_role? :client, :any 
     scope.with_role(:client, user) 
     else 
     scope.none 
     end 
    end 
    end 
end 

謝謝!

回答

0

這樣解決了我的問題。我希望它能幫助別人。

我的模型Agency有許多Clients

class Agency < ApplicationRecord 
    has_many :clients 

    resourcify 
end 

User有關係:

class User < ApplicationRecord 
    has_many :users_roles 
    has_many :roles, through: :users_roles 
    has_many :agencies, through: :roles, source: :resource, source_type: 'Agency' 

    rolify 

    ... 
end 

需要創建UsersRole型號:

class UsersRole < ApplicationRecord 
    belongs_to :user 
    belongs_to :role 
end 

最後,我ClientPolicy

class ClientPolicy < ApplicationPolicy 
    def show? 
    user.has_role?(:admin) || user.has_role?(:client, record) 
    end 

    class Scope < Scope 
    def resolve 
     if user.has_role? :admin 
     scope.all 
     elsif user.has_role? :client, :any 
     scope.with_role(:client, user) 
     elsif user.has_role? :agency, :any 
     scope.where(agency_id: user.agencies.pluck(:id)) 
     else 
     scope.none 
     end 
    end 
    end 
end