2011-02-07 1 views
0

Ruby/Rails3 응용 프로그램에 로그인 한 후 사용자의 역할에 따라 특정 URL에서 사용자를 리디렉션하는 방법을 알아 내려고합니다.레일 3의 역할에 따라 사용자를 리디렉션합니까?

지금까지 필자는 인증을 위해 authlogic gem을 사용했으며 역할 설정을 위해 cancan gem을 사용했습니다.

역할은 (응용 프로그램/모델/user.rb에 정의)이 같다 :

class User < ActiveRecord::Base 
    acts_as_authentic 
    ROLES = %w[admin customer demo] 
end 

지금 로그인 돌보는되는 응용 프로그램/컨트롤러/user_session_controller.rb있다. 따라서 특정 URL로 사용자를 리디렉션하는 방법을 간단한 또는 우아한 방법이 있나요

"undefined method `role' for #<Class:0xb5bb6e88>" 

:이 다음 오류 때문에 작동하지

for r in User.role 
     if r == "admin" 
     redirect_to admins_url 
     else 
     redirect_to users_url 
     end 
end 

: 나는 이런 일을하고 싶습니다 그들의 역할에?

답변

1

for r in User.role은 혼란 (MySQL의 칼럼 역할을 사용자 테이블의 역할. '로 정의된다). 클래스에 정의 된 ROLES 배열에 액세스하려고합니까, 현재 사용자의 역할 값에 액세스하려고합니까?

ROLES 배열에 액세스하려는 경우 User::ROLES을 사용하십시오.

authlogic을 사용하면 일반적으로 application_controller에서 current_user를 정의합니다. 그래서 현재 사용자의 역할은 current_user.role

그래서 코드 당신은 확실히 CanCan을 확인해야

if current_user.role == "admin" 
    redirect_to admins_url 
    else 
    redirect_to users_url 
    end 
+0

@ steve-wilhelm 이것은 좋은 지적입니다. 현재 사용자의 역할 값에 액세스하려고합니다. 그러나이 방법을 사용하면 오류가 발생합니다. 정의되지 않은 메서드 'role'for nil : NilClass – user607225

+0

사용자 테이블 마이그레이션에 역할을 추가하고 rake db : migrate를 수행 했습니까? –

+0

ofcourse, 역할 mysql 필드는 적절한 데이터로 채워집니다. 예 : 테이블 : 사용자, 열 : 값으로 채워지는 역할 : "관리자" – user607225

1

같은 것을 볼 수 있었다 사용하여 찾을 수 있습니다. 그것은 사용자의 역할과 능력을 관리하는 꽤 논리적 인 방법입니다.