2012-09-29 3 views
0

declarative_authorization 보석을 사용하여 프로젝트 관리자 및 프로젝트 공동 작업자 역할을 만들려고합니다.레일 declarative_authorization project_admin role

사용자에게 프로젝트 매핑을 저장하는 '공동 작업자'라는 테이블이 있습니다.

모델 :

프로젝트

has_many :collaborators 
has_many :users, :through => :collaborators 

사용자

has_many :collaborators 
has_many :projects, :through => :collaborators 

공동 작업자 나는 project_admin 및 project_c의 DSL 정의에 몇 가지 지침이 필요

belongs_to :user 
belongs_to :project 

ollaborator 역할. 나는 다음과 같이 올라와있다 :

authorization do 
    role :guest do 
    has_permission_on :users, :to => [:read] 
    end 

    role :project_admin do 
    has_permission_on :projects, :to => :manage do 
     if_attribute :project_admin => true 
    end 
    end 

    role :admin do 
    has_permission_on :users, :to => [:delete] 
    end 
end 

privileges do 
    privilege :manage do 
    includes :create, :read, :update, :delete 
    end 
end 

어떤 제안을 감사합니다/도움이됩니다.
감사합니다.

답변

0

모든 사용자가 프로젝트 관리자가 될 수 있도록 내가 그런 일을 선호하는 것 :

프로젝트

has_many :collaborators 
has_many :users, :through => :collaborators 
belongs_to :admin, :table_name => 'users' # Maybe has_many? 

authorization_rules.rb

authorization do 
    role :guest do 
    has_permission_on :users, :to => [:read] 
    end 

    role :user do 
    has_permission_on :projects, :to => :create 
    has_permission_on :projects, :to => :manage do 
     if_attribute :admin => is { user } 
    end 
    has_permission_on :projects, :to => :read do 
     if_attribute :collaborators => contains { user } 
    end 
    has_permission_on :files, :to => :manage do 
     if_permitted_to :read, :project 
    end 
    end 
end 

privileges do 
    privilege :manage do 
    includes :create, :read, :update, :delete 
    end 
    privilege :read, :includes => [:index, :show] 
    privilege :create, :includes => :new 
    privilege :update, :includes => :edit 
    privilege :delete, :includes => :destroy 
end