2010-03-02 5 views
4

Modèle d'utilisateur très basique, je souhaite que l'utilisateur admin: gère tousCanCan gem | impossible: index, utilisateur

sinon ne peut pas: index, utilisateur et d'autres options, mais lorsque j'essaie de bloquer les utilisateurs non administrateurs de voir l'index des utilisateurs , l'utilisateur admin n'a pas non plus accès.

ceci est mon ability.rb

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new #guest user 

    can :manage, :all if user.role == "admin" #if user.admin? can :manage, :all 
    can :assign_role, User 

    else 
     can :read, :all 
     can :create, User 


     cannot :assign_role, User 
     cannot :index, User 

     can [:show, :edit, :update], User do |current_user| 
       user.id == current_user.id || user.role == "admin" 
      end 



    end 
end 

Que puis-je faire pour arrêter tous les utilisateurs bloqués de l'index de l'utilisateur?

Cordialement

Dan

+2

Très peu de soupe de code là-bas. À quoi est-ce lié? – tadman

Répondre

3

Quelque chose ne va pas avec if-else dans le code.

if user.role == "admin" 
    can :manage, :all 
    can :assign_role, User 

else 
    can :read, :all 
    can :create, User 


    cannot :assign_role, User 
    cannot :index, User 
    can [:show, :edit, :update], User do |current_user| 
    user.id == current_user.id || user.role == "admin" 
    end 

end 

Et vous ne devez pas refuser utilisateur non administrateur d'attribuer le rôle de toute évidence (ne peut pas: assign_role, utilisateur).

+0

Ai-je raison de penser l'instruction IF pour administration arrêter juste après le premier « peut » parce que je n'ai pas dit avec IF et commencé avec CAN: GÉRER,: tous IF USER.ROLE == « ADMIN » En tout cas merci UZZZ, bonne aide! – MrThomas

+0

oui, l'instruction "if" ne fonctionne que pour une ligne de code si elle est située à la fin d'une ligne – uzzz

Questions connexes