2010-03-02 5 views
4

아주 기본적인 사용자 모델, 나는에 admin 사용자를 기원합니다 : 없습니다 수행 할 수 있습니다 관리하는 모든 다른CanCan gem | 인덱스, 사용자

수 없습니다 : 인덱스, 사용자 및 몇 가지 다른 옵션, 그러나 나는 시도하고 사용자 색인을 볼 수 비 관리자 사용자를 차단하면 , admin 사용자도 액세스 할 수 없습니다.

이 내 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 

내가 모든 사용자가 사용자 인덱스에서 차단을 중지하기 위해 무엇을 할 수 있는가? 문제

감사

+2

꽤 많은 코드 수프가 있습니다. 그 밖의 다른 것은 무엇입니까? 관리 : – tadman

답변

3

뭔가 경우 - 다른 코드입니다.

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 

또한 당신은 분명 역할을 할당 관리자가 아닌 사용자를 거부 할 필요는 없습니다 (수 없습니다 : assign_role, 사용자).

+0

바로 내가 IF와 상태 및 시작하지 않았기 때문에 첫 번째 할 수있는 "수"후 바로 정지 관리자에 대한 IF 문을 생각하는 나는 오전 모든 USER.ROLE IF == "ADMIN" 어쨌든 UZZZ, 큰 도움에 감사드립니다! – MrThomas

+0

예, "if"문은 줄 끝 부분에있는 경우 한 줄의 코드에서만 작동합니다. – uzzz

관련 문제