2012-09-29 1 views
0

J'essaie de créer des rôles d'administrateur de projet et de collaborateur de projet en utilisant la gemme declarative_authorization.Rails declareative_authorization project_admin role

J'ai une table appelée 'collaborateurs' qui détient les utilisateurs pour les mappages de projets.

Modèles:

projet

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

utilisateur

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

Collaborator

belongs_to :user 
belongs_to :project 

je besoin de quelques conseils sur la définition du dsl pour project_admin et project_c rôle de collaborateur. Je suis venu avec ce qui suit:

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 

Toute suggestion/aide.
Merci!

Répondre

0

Je préférerais quelque chose comme ça pour que chaque utilisateur puisse devenir un administrateur de projet:

Projet

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 
Questions connexes