2010-01-21 1 views
0

저는 필자가 작문하는 시간표 응용 프로그램에서 역할 기반 액세스 제한을 구현하기 위해 선언적 권한을 사용하고 있습니다.역할을 확인하는 방법

필자의 의견 중 하나는 특히 로그인 한 사용자에게 관리 역할이 할당되어있는 경우 자세한 time_register에 대한 index.html.erb가 더 많은 정보를 표시해야한다는 것입니다. 태초에

난 그냥 그 사용자가 확인되었다 == 1 ID == 1

<% if @current_user.id == 1 %> 

과 하나가 될 것입니다하지만 지금은 ID를 가진 사용자에게 제한하지 수 있도록하고 싶습니다 관리 역할이 할당 된 모든 사용자가 index.html.erb 파일에서 조금 더 볼 수 있도록 허용합니다.

모델이

내 권한 파일은 다음과 같습니다
class User < ActiveRecord::Base 
    has_many :assignments 

class Role < ActiveRecord::Base 
    has_many :assignments 
    has_many :users, :through => :assignment 

class Assignment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :role 

declarative_authorization로 설정하는 방법을 비트 : 음

authorization do 

    role :usuarios do 
    has_permission_on :users, :to => [:index, :show, :new, :create, :edit, :update] 
    end 

    role :reghoras do 
    has_permission_on :time_registers, :to => [:index, :show, :new, :create, :edit, :update] 
    has_permission_on :users do 
     to :show 
     if_attribute :id => is {user.id} 
    end 
    end 

    role :contactos do 
    has_permission_on :contacts, :to => [:index, :show, :new, :create, :edit, :update] 
    has_permission_on :users do 
     to :show 
     if_attribute :id => is {user.id} 
    end 
    end 

    role :admin do 
    has_permission_on :authorization_rules, :to => :read 
    has_permission_on [:time_registers, :contacts, :users, :roles], :to => [:index, :show, :new, :create, :edit, :update, :destroy] 
    end 

    role :guest do 
    has_permission_on [:time_registers, :contacts], :to => [:index, :show] 
    end 

end 

, 나는 다른 사람이 질문에 대답하는 데 필요한 것이 무엇인지 확실하지 않다 , 더 많은 정보를 요청하십시오.

답변

3

좋아요, 그래서 나는이 예를 보았고 이것에 대해 아무 것도 발견하지 못했습니다. 하지만 API를 다시 확인한 후에 효과가있는 것을 찾았습니다.

나는 누군가가이 같은 문제에 대한 도움말을 원하는에 의해 오는 일이 이런 경우에

<% if has_role?(:admin) %> 

에 대한

<% if @current_user.id == 1 %> 

의 모든 인스턴스를 교환, 다음은 내가 찾은 API의 페이지입니다 상기 기능 :

http://www.tzi.org/~sbartsch/declarative_authorization/master/ 많은 설명이 없지만 소스를 보면 현재 사용자에게 함수에 전달 된 특정 역할이 있는지 확인합니다. 그것이 함수를 직접 사용하는 방법입니다.

제가하고있는 일이 실제로 관리자 페이지 구현에 대한 올바른 방법인지 또는 관리자보기가 일반 사용자 용보기와 별도이고 동일한 파일이 아닌지 구현해야하는지 궁금합니다. 지금까지이 작업을 수행하는 방법에 대한 논의를 찾지 못했습니다.