2017-10-10 8 views
0

J'ai un modèle appelé Demande de parrainage et table et vues associées. J'ai trois rôles d'utilisateur définis en utilisant enums:Pundit Policy Scope Non implémenté correctement

enum role: { staff: 0, clinician: 1, admin: 2 } 

Les utilisateurs appartiennent aux universités, et les universités ont de nombreux utilisateurs du personnel. Mon intention dans de nombreuses parties de mon application est d'utiliser des politiques d'experts pour montrer seulement aux utilisateurs du personnel des enregistrements qui sont associés à d'autres utilisateurs de leur université. J'essaie de le faire pour des demandes de référence par exemple, mais j'ai quelque chose de mal configuré, car il montre à un utilisateur donné toutes les demandes de référence, qu'elles aient été créées par un autre utilisateur appartenant à son université ou non. Qu'est-ce que je fais mal?

Renvoi Politique de demande:

class ReferralRequestPolicy < ApplicationPolicy 
    class Scope 
    attr_reader :user, :scope 

    def initialize(user, scope) 
     @user = user 
     @scope = scope 
    end 

    def resolve 
     if user.admin? 
     scope.all 
     else 
     scope.joins(:user).merge(User.where(university: user.university)) 
     end 
    end 
    end 

def index? 
    user.staff? or user.admin? 
end 
end 

renvoi demande Modèle:

class ReferralRequest < ApplicationRecord 
    belongs_to :user, -> { where role: :staff } 
    belongs_to :patient 
    has_many :dispatches 
    has_many :clinicians, through: :dispatches 
    has_and_belongs_to_many :languages 
    has_and_belongs_to_many :races 
    has_and_belongs_to_many :genders 
    validates :user_id, presence: true 
    enum status: { created: 0, sent: 1, shared: 2, closed_under_care: 3, closed_not_seeking_care: 4, closed_unresponsive: 5 } 
end 

préoccupation utilisateur du personnel:

require 'active_support/concern' 

module StaffUser 
    extend ActiveSupport::Concern 

    included do 
    belongs_to :university 
    has_many :patients 
    has_many :referral_requests 
    validates :university_id, presence: true, if: :staff? 
    end 

    class_methods do 
    end 
end 

Université Modèle

class University < ApplicationRecord 
    has_many :staffs, -> { where role: :staff}, class_name: "User" 
    has_many :clinicians, through: :lists 
    has_many :whitelists 
    belongs_to :market 

    validates :market_id, presence: true 
end 

Répondre

0

J'ai oublié de changer mon action index dans mon renvoi Demande contrôleur. Cela a résolu le problème. Détails.

def index 
     @referral_requests = policy_scope(ReferralRequest) 
    end