2014-07-25 3 views
0

역할 기반 권한에 대해 선언적 권한을 사용하는 비교적 큰 레일 앱이 있습니다. 관리자 사용자는 현재 다음과 같은 권한이 :선언적 권한 has_ ​​(not) _permission_on

role :administrator do 
    has_omnipotence 
end 

내가 독점적으로 특정 작업에 대한 권한을 가질 수 있습니다 더 높은 역할 (루트)를 추가해야합니다.

할 분명한 것은 관리자 역할 블록에서 has_omnipotence 제거하고 수동으로 모든 컨트롤러하지만 root_accounts에 모든 권한을 추가 취득하는 것입니다, 그러나 이것은 고통이다. 내가 다음과 같은 것을 할 수있는 방법이 있습니까?

role :root do 
    has_permission_on [:root_accounts], :to => [:new, :create ... ] 
end 

role :administrator do 
    has_omnipotence {except [:root_accounts], :to => [:new, :create ...]} 
end 

답변

0

구문이 없습니다. 그러나 당신은 당신의 뷰/컨트롤러의 특정 역할을 확인할 수 있습니다 :

<% unless has_role?(:administrator) %> 
    <%= link_to 'New root account', new_root_account_path %> 
<% end %> 

또는

def create 
    permission_denied if has_role?(:administrator) 
    ... 
end 

그것은 매우 확장 성이 상점이 아니다.