Project model refactored. Modularity gem
This commit is contained in:
parent
bae4efa7cf
commit
88d9569a33
7 changed files with 297 additions and 277 deletions
60
app/models/project/permissions_trait.rb
Normal file
60
app/models/project/permissions_trait.rb
Normal file
|
@ -0,0 +1,60 @@
|
|||
module Project::PermissionsTrait
|
||||
as_trait do
|
||||
# Compatible with all access rights
|
||||
# Should be rewrited for new access rights
|
||||
def add_access(user, *access)
|
||||
access = if access.include?(:admin)
|
||||
{ :project_access => UsersProject::MASTER }
|
||||
elsif access.include?(:write)
|
||||
{ :project_access => UsersProject::DEVELOPER }
|
||||
else
|
||||
{ :project_access => UsersProject::REPORTER }
|
||||
end
|
||||
opts = { :user => user }
|
||||
opts.merge!(access)
|
||||
users_projects.create(opts)
|
||||
end
|
||||
|
||||
def reset_access(user)
|
||||
users_projects.where(:project_id => self.id, :user_id => user.id).destroy if self.id
|
||||
end
|
||||
|
||||
def repository_readers
|
||||
keys = Key.joins({:user => :users_projects}).
|
||||
where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::REPORTER)
|
||||
keys.map(&:identifier) + deploy_keys.map(&:identifier)
|
||||
end
|
||||
|
||||
def repository_writers
|
||||
keys = Key.joins({:user => :users_projects}).
|
||||
where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::DEVELOPER)
|
||||
keys.map(&:identifier)
|
||||
end
|
||||
|
||||
def repository_masters
|
||||
keys = Key.joins({:user => :users_projects}).
|
||||
where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::MASTER)
|
||||
keys.map(&:identifier)
|
||||
end
|
||||
|
||||
def allow_read_for?(user)
|
||||
!users_projects.where(:user_id => user.id).empty?
|
||||
end
|
||||
|
||||
def guest_access_for?(user)
|
||||
!users_projects.where(:user_id => user.id).empty?
|
||||
end
|
||||
|
||||
def report_access_for?(user)
|
||||
!users_projects.where(:user_id => user.id, :project_access => [UsersProject::REPORTER, UsersProject::DEVELOPER, UsersProject::MASTER]).empty?
|
||||
end
|
||||
|
||||
def dev_access_for?(user)
|
||||
!users_projects.where(:user_id => user.id, :project_access => [UsersProject::DEVELOPER, UsersProject::MASTER]).empty?
|
||||
end
|
||||
|
||||
def master_access_for?(user)
|
||||
!users_projects.where(:user_id => user.id, :project_access => [UsersProject::MASTER]).empty? || owner_id == user.id
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue