2017-10-02 4 views
0

J'essaie d'utiliser cette règle pundit pour empêcher les utilisateurs avec le rôle clinicien d'accéder à l'action d'index sur le contrôleur de patients. La section portée fonctionne actuellement comme je l'espérais, mais avec la politique telle qu'elle est actuellement rédigée, je peux toujours accéder/patients en tant qu'utilisateur clinicien. Qu'est-ce que je fais mal? Merci pour toute aide!Stratégie Pundit Restreindre l'action d'index et afficher des rôles spécifiques

Voici mes définitions de rôle:

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

Politique des patients

class PatientPolicy < 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 

patients contrôleur:

def index 
    @patients = policy_scope(Patient) 
end 
[rest of controller] 

Répondre

1

propre but: Je devais ajouter la ligne d'autorisation à mon action d'index dans mon contrôleur de patients:

def index 
    authorize Patient 
    @patients = policy_scope(Patient) 
end