2013-04-08 2 views
0

레일을 사용하여 Rolify (자습서를 보려면 클릭하십시오) : can 메서드가 작동하지 않는 것처럼 보이므로 사용자 권한을 사용할 수 없게 만드는 이상한 문제가 발생합니다. 아래는 내 ability.rb 파일과 콘솔 출력이며 문제가있는 곳입니다.false를 반환하는 능력 굴리기

class Ability 
    include CanCan::Ability 

    def initialize(user) 

    user ||= User.new # guest user (not logged in) 

    if user.has_role? :admin 
     can :manage, :all 
    else 
     can :read, :all 
    end 

    end 
end 

콘솔 테스트 ($ rails console는)

user = User.find(2) 
user.add_role "admin" 
user.has_role? :admin 
=> **true** 

ability = Ability.new(user) 
ability.can? :manage, :all 
=> **false** 
ability.can? :read, :all 
=> **false** 

또한 데이터베이스에 확인하고 모든 관계가 올바르게 설정되어 있습니다. 나는 레일 3.2.13을 달리고있다.

+0

'ability.can? '을 테스트 할 때': all' 대신 실제 모델이나 모델 클래스를 전달하려고 시도 했습니까? – PinnyM

답변

1

문제는 보석 충돌로 canard 또는 declarative_authorization입니다. 둘 다 비활성화하고 레일 서버를 다시 시작하면 문제가 해결되었습니다. 아마도 이것은 다른 보석을 시험 할 때 같은 길을 걷은 다른 사람들을 도울 것입니다.

0

CanCan은 현재 로그인 한 사용자를 반환하는 current_user 메서드의 존재 여부에 의존합니다. 이 방법은 인증을 위해 예를 들어 사용하려는 경우에 사용됩니다. 다른 것을 사용하고 있다면 current_user 메서드가 있는지 확인해야합니다.