2017-10-07 27 views
0

내 프로젝트에서 Devise 인증을 사용하는 사용자 클래스가 있습니다. 각 사용자에게는 하나의 역할이 있습니다. 예를 들어 관리자는 역할 # 1입니다.레일즈 : cancancan gem 조건이 작동하지 않습니다.

역할은 클래스이며 role_id를 기준으로 역할과 사용자가 연결됩니다. 관리자는 1의 role_id를 갖습니다.

각 사용자에 대한 권한을 관리하기 위해 cancancan gem이 설치되었습니다. 관리자 만 사용자 계정을 만들 수 있습니다. 그래서, 내가 능력이 클래스에서 쓴 : 내 관리자로 로그인하고 새로운 사용자 페이지에 액세스하려고 할 때

def new 
    @user = User.new 
    authorize! :manage, @user 
end 

문제는 내 사용자 컨트롤러에서

def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user.role_id == 1 
     can :manage, :user 
    else 
     cannot :manage, :user 
    end 
end 

,이이 , 나는 cancancan으로부터 그 페이지에 접근 할 수있는 권한이 없다는 메시지를 받는다.

나는 내 상태인지 모르거나 내가 액세스려고 할 때 도움을 ...

감사를 user.role_id하거나.

는 cancancan 보석을 참조하십시오 https://github.com/CanCanCommunity/cancancan

편집 :

내 IDE 그것이 CURRENT_USER를 찾을 수 없다는 경우가 정상입니까? 보시다시피

enter image description here

는 읽기 권한 후 @article있다 : 당신은 GitHub의에 체크하면 enter image description here

또한, cancancan 사용하는 방법에 대한 예제가있다.

문제가 정확하지이었다 :user이었다 그래서 나는 @user

마지막으로

대신 CURRENT_USER를 둘 필요가 있다고 생각하지 않습니다. 모델 일 때 ":"이없는 모델의 이름에 대문자를 먼저 써야합니다. 따라서 :user 대신 User

+0

문제 : 사용자가 올바르지 않습니다. 모델 일 때 ":"이없는 모델의 이름에 대문자를 먼저 써야합니다. 따라서 대신 : user, 사용자 여야합니다. –

답변

0

은 Rails 세션에 의존해야합니다. 사용자 컨트롤러의 # 새 동작이므로 활성 세션이 없으므로 current_user가 없습니다.