authority.rb 1.9 KB
Newer Older
D
Dmitriy Zaporozhets 已提交
1 2 3 4 5 6
# == Authority role
#
# Control access to project repository based on users role in team
#
# Used by Project
#
7 8 9 10
module Authority
  # Compatible with all access rights
  # Should be rewrited for new access rights
  def add_access(user, *access)
A
Andrey Kumanyaev 已提交
11 12
    access = if access.include?(:admin)
               { project_access: UsersProject::MASTER }
13
             elsif access.include?(:write)
A
Andrey Kumanyaev 已提交
14
               { project_access: UsersProject::DEVELOPER }
15
             else
A
Andrey Kumanyaev 已提交
16
               { project_access: UsersProject::REPORTER }
17
             end
18
    opts = { user: user }
19 20 21 22 23
    opts.merge!(access)
    users_projects.create(opts)
  end

  def reset_access(user)
24
    users_projects.where(project_id: self.id, user_id: user.id).destroy if self.id
25 26 27
  end

  def repository_readers
28
    repository_members[UsersProject::REPORTER]
29 30 31
  end

  def repository_writers
32
    repository_members[UsersProject::DEVELOPER]
33 34 35
  end

  def repository_masters
36 37 38 39 40 41 42 43 44 45 46
    repository_members[UsersProject::MASTER]
  end

  def repository_members
    keys = Hash.new {|h,k| h[k] = [] }
    UsersProject.select("keys.identifier, project_access").
        joins(user: :keys).where(project_id: id).
        each {|row| keys[row.project_access] << [row.identifier] }

    keys[UsersProject::REPORTER] += deploy_keys.pluck(:identifier)
    keys
47 48 49
  end

  def allow_read_for?(user)
50
    !users_projects.where(user_id: user.id).empty?
51 52 53
  end

  def guest_access_for?(user)
54
    !users_projects.where(user_id: user.id).empty?
55 56 57
  end

  def report_access_for?(user)
58
    !users_projects.where(user_id: user.id, project_access: [UsersProject::REPORTER, UsersProject::DEVELOPER, UsersProject::MASTER]).empty?
59 60 61
  end

  def dev_access_for?(user)
62
    !users_projects.where(user_id: user.id, project_access: [UsersProject::DEVELOPER, UsersProject::MASTER]).empty?
63 64 65
  end

  def master_access_for?(user)
66
    !users_projects.where(user_id: user.id, project_access: [UsersProject::MASTER]).empty?
67 68
  end
end