authority.rb 1.9 KB
Newer Older
1 2 3 4 5
module Authority
  # Compatible with all access rights
  # Should be rewrited for new access rights
  def add_access(user, *access)
    access = if access.include?(:admin) 
6
               { project_access: UsersProject::MASTER } 
7
             elsif access.include?(:write)
8
               { project_access: UsersProject::DEVELOPER } 
9
             else
10
               { project_access: UsersProject::REPORTER } 
11
             end
12
    opts = { user: user }
13 14 15 16 17
    opts.merge!(access)
    users_projects.create(opts)
  end

  def reset_access(user)
18
    users_projects.where(project_id: self.id, user_id: user.id).destroy if self.id
19 20 21
  end

  def repository_readers
22
    keys = Key.joins({user: :users_projects}).
23 24 25 26 27
      where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::REPORTER)
    keys.map(&:identifier) + deploy_keys.map(&:identifier)
  end

  def repository_writers
28
    keys = Key.joins({user: :users_projects}).
29 30 31 32 33
      where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::DEVELOPER)
    keys.map(&:identifier)
  end

  def repository_masters
34
    keys = Key.joins({user: :users_projects}).
35 36 37 38 39
      where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::MASTER)
    keys.map(&:identifier)
  end

  def allow_read_for?(user)
40
    !users_projects.where(user_id: user.id).empty?
41 42 43
  end

  def guest_access_for?(user)
44
    !users_projects.where(user_id: user.id).empty?
45 46 47
  end

  def report_access_for?(user)
48
    !users_projects.where(user_id: user.id, project_access: [UsersProject::REPORTER, UsersProject::DEVELOPER, UsersProject::MASTER]).empty?
49 50 51
  end

  def dev_access_for?(user)
52
    !users_projects.where(user_id: user.id, project_access: [UsersProject::DEVELOPER, UsersProject::MASTER]).empty?
53 54 55
  end

  def master_access_for?(user)
56
    !users_projects.where(user_id: user.id, project_access: [UsersProject::MASTER]).empty? || owner_id == user.id
57 58
  end
end