2013-04-02 5 views
0

레일즈 앱에서 CanCan 지원 기능이있는 Rails Admin이 있습니다. 나는 한 가지 문제에 혼란 스럽다. CanCan은 어떤 사용자가 로그인했는지 어떻게 알 수 있습니까? 예를 들어 내 사용자는 다른 역할을 할 수 있으며 CanCan을 통해 각 테이블에 특정 액세스에 대한 역할을 할당합니다. 내가 localhost:3000/admin에 갈 때, 나는 오류CanCan 기능 및 사용자 이해

CanCan::AccessDenied in RailsAdmin::MainController#dashboard 

Ability.rb 파일을 수신

def initialize(user) 
    if user and user.role.eql? :super_admin 
     can :manage, :all    # allow superadmins to do anything 
    elsif user and user.role.eql? :admin 
     can :manage, [Location, School] # allow admins to manage only Locations and Schools 
    end 
    end 

그래서 내가 그렇게 사용자의가 레일 관리자로 로그인 할 수있는 능력을 가지고해야합니까? 수동으로 만들어야합니까?

답변

1

컨트롤러에서 current_user 메서드를 사용할 수 있어야합니다. 그럴 경우 서명하지 않으면 현재 사용자에게 액세스 할 수 없으므로 능력 파일에 사용자가 없으면 사용자를 지정해야합니다. initialize 메서드에서 user ||= User.new을 추가하여 사용자가 아직없는 경우 할당을 만듭니다.

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

    if user and user.role.eql? :super_admin 
    can :manage, :all    # allow superadmins to do anything 
    elsif user and user.role.eql? :admin 
    can :manage, [Location, School] # allow admins to manage only Locations and Schools 
    end 
end 
+0

아를. 나는 그것이 그럴지도 모르지만 문서에서 확인할 수는 없다고 생각했다. 감사. – jason328

+0

문제 없습니다, @ jason328! 다행스럽게 도울 수있어! –

2

기본적으로 CanCan은 current_user이 반환하는 값을 사용합니다. 네임 스페이스 내에서 Devise를 사용하는 경우 (예 : admin) Devise는 실제로 current_admin_user을 대신 사용합니다. ApplicationController (또는 다른 기본 컨트롤러)에서 current_admin_user을 반환하는 메서드를 만들거나 current_ability 메서드를 덮어 쓰면 대신 current_admin_user을 사용하여 능력을 인스턴스화 할 수 있습니다.

(이 모든 고안 네임 스페이스를 사용하는 가정합니다. 기본적 고안하여 current_user 사용)