Merge branch 'refactor/access_roles' of /home/git/repositories/gitlab/gitlabhq
This commit is contained in:
commit
817b9d1b47
10 changed files with 66 additions and 53 deletions
|
@ -133,10 +133,6 @@ class Project < ActiveRecord::Base
|
||||||
where(path: id, namespace_id: nil).last
|
where(path: id, namespace_id: nil).last
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def access_options
|
|
||||||
UsersProject.access_roles
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def team
|
def team
|
||||||
|
@ -399,11 +395,6 @@ class Project < ActiveRecord::Base
|
||||||
http_url = [Gitlab.config.gitlab.url, "/", path_with_namespace, ".git"].join('')
|
http_url = [Gitlab.config.gitlab.url, "/", path_with_namespace, ".git"].join('')
|
||||||
end
|
end
|
||||||
|
|
||||||
def project_access_human(member)
|
|
||||||
project_user_relation = self.users_projects.find_by_user_id(member.id)
|
|
||||||
self.class.access_options.key(project_user_relation.project_access)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Check if current branch name is marked as protected in the system
|
# Check if current branch name is marked as protected in the system
|
||||||
def protected_branch? branch_name
|
def protected_branch? branch_name
|
||||||
protected_branches_names.include?(branch_name)
|
protected_branches_names.include?(branch_name)
|
||||||
|
|
|
@ -12,21 +12,10 @@
|
||||||
|
|
||||||
class UsersGroup < ActiveRecord::Base
|
class UsersGroup < ActiveRecord::Base
|
||||||
include Notifiable
|
include Notifiable
|
||||||
|
include Gitlab::Access
|
||||||
GUEST = 10
|
|
||||||
REPORTER = 20
|
|
||||||
DEVELOPER = 30
|
|
||||||
MASTER = 40
|
|
||||||
OWNER = 50
|
|
||||||
|
|
||||||
def self.group_access_roles
|
def self.group_access_roles
|
||||||
{
|
Gitlab::Access.options_with_owner
|
||||||
"Guest" => GUEST,
|
|
||||||
"Reporter" => REPORTER,
|
|
||||||
"Developer" => DEVELOPER,
|
|
||||||
"Master" => MASTER,
|
|
||||||
"Owner" => OWNER
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_accessible :group_access, :user_id
|
attr_accessible :group_access, :user_id
|
||||||
|
@ -50,7 +39,7 @@ class UsersGroup < ActiveRecord::Base
|
||||||
|
|
||||||
delegate :name, :username, :email, to: :user, prefix: true
|
delegate :name, :username, :email, to: :user, prefix: true
|
||||||
|
|
||||||
def human_access
|
def access_field
|
||||||
UsersGroup.group_access_roles.key(self.group_access)
|
group_access
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,11 +14,7 @@
|
||||||
class UsersProject < ActiveRecord::Base
|
class UsersProject < ActiveRecord::Base
|
||||||
include Gitlab::ShellAdapter
|
include Gitlab::ShellAdapter
|
||||||
include Notifiable
|
include Notifiable
|
||||||
|
include Gitlab::Access
|
||||||
GUEST = 10
|
|
||||||
REPORTER = 20
|
|
||||||
DEVELOPER = 30
|
|
||||||
MASTER = 40
|
|
||||||
|
|
||||||
attr_accessible :user, :user_id, :project_access
|
attr_accessible :user, :user_id, :project_access
|
||||||
|
|
||||||
|
@ -27,7 +23,7 @@ class UsersProject < ActiveRecord::Base
|
||||||
|
|
||||||
validates :user, presence: true
|
validates :user, presence: true
|
||||||
validates :user_id, uniqueness: { scope: [:project_id], message: "already exists in project" }
|
validates :user_id, uniqueness: { scope: [:project_id], message: "already exists in project" }
|
||||||
validates :project_access, inclusion: { in: [GUEST, REPORTER, DEVELOPER, MASTER] }, presence: true
|
validates :project_access, inclusion: { in: Gitlab::Access.values }, presence: true
|
||||||
validates :project, presence: true
|
validates :project, presence: true
|
||||||
|
|
||||||
delegate :name, :username, :email, to: :user, prefix: true
|
delegate :name, :username, :email, to: :user, prefix: true
|
||||||
|
@ -103,27 +99,15 @@ class UsersProject < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def roles_hash
|
def roles_hash
|
||||||
{
|
Gitlab::Access.sym_options
|
||||||
guest: GUEST,
|
|
||||||
reporter: REPORTER,
|
|
||||||
developer: DEVELOPER,
|
|
||||||
master: MASTER
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def access_roles
|
def access_roles
|
||||||
{
|
Gitlab::Access.options
|
||||||
"Guest" => GUEST,
|
|
||||||
"Reporter" => REPORTER,
|
|
||||||
"Developer" => DEVELOPER,
|
|
||||||
"Master" => MASTER
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def project_access_human
|
def access_field
|
||||||
Project.access_options.key(self.project_access)
|
project_access
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :human_access, :project_access_human
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -43,7 +43,7 @@ class SystemHooksService
|
||||||
project_id: model.project_id,
|
project_id: model.project_id,
|
||||||
user_name: model.user.name,
|
user_name: model.user.name,
|
||||||
user_email: model.user.email,
|
user_email: model.user.email,
|
||||||
project_access: model.project_access_human
|
project_access: model.human_access
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -96,11 +96,12 @@
|
||||||
%i.icon-edit
|
%i.icon-edit
|
||||||
Manage Access
|
Manage Access
|
||||||
%ul.well-list.team_members
|
%ul.well-list.team_members
|
||||||
- @project.users.each do |user|
|
- @project.users_projects.each do |users_project|
|
||||||
|
- user = users_project.user
|
||||||
%li
|
%li
|
||||||
%strong
|
%strong
|
||||||
= link_to user.name, admin_user_path(user)
|
= link_to user.name, admin_user_path(user)
|
||||||
.pull-right
|
.pull-right
|
||||||
%span.light= @project.project_access_human(user)
|
%span.light= users_project.human_access
|
||||||
= link_to admin_project_member_path(@project, user), confirm: remove_from_project_team_message(@project, user), method: :delete, class: "btn btn-small btn-remove" do
|
= link_to admin_project_member_path(@project, user), confirm: remove_from_project_team_message(@project, user), method: :delete, class: "btn btn-small btn-remove" do
|
||||||
%i.icon-remove
|
%i.icon-remove
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
%p
|
%p
|
||||||
= "You have been granted #{@users_project.project_access_human} access to project"
|
= "You have been granted #{@users_project.human_access} access to project"
|
||||||
%p
|
%p
|
||||||
= link_to project_url(@project) do
|
= link_to project_url(@project) do
|
||||||
= @project.name_with_namespace
|
= @project.name_with_namespace
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
|
|
||||||
You have been granted <%= @users_project.project_access_human %> access to project <%= @project.name_with_namespace %>
|
You have been granted <%= @users_project.human_access %> access to project <%= @project.name_with_namespace %>
|
||||||
|
|
||||||
<%= url_for(project_url(@project)) %>
|
<%= url_for(project_url(@project)) %>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
%h6 2. Set access level for them
|
%h6 2. Set access level for them
|
||||||
.control-group
|
.control-group
|
||||||
= f.label :project_access, "Project Access"
|
= f.label :project_access, "Project Access"
|
||||||
.controls= select_tag :project_access, options_for_select(Project.access_options, @user_project_relation.project_access), class: "project-access-select chosen"
|
.controls= select_tag :project_access, options_for_select(Gitlab::Access.options, @user_project_relation.project_access), class: "project-access-select chosen"
|
||||||
|
|
||||||
.form-actions
|
.form-actions
|
||||||
= f.submit 'Add users', class: "btn btn-create"
|
= f.submit 'Add users', class: "btn btn-create"
|
||||||
|
|
48
lib/gitlab/access.rb
Normal file
48
lib/gitlab/access.rb
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# Gitlab::Access module
|
||||||
|
#
|
||||||
|
# Define allowed roles that can be used
|
||||||
|
# in GitLab code to determine authorization level
|
||||||
|
#
|
||||||
|
module Gitlab
|
||||||
|
module Access
|
||||||
|
GUEST = 10
|
||||||
|
REPORTER = 20
|
||||||
|
DEVELOPER = 30
|
||||||
|
MASTER = 40
|
||||||
|
OWNER = 50
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def values
|
||||||
|
options.values
|
||||||
|
end
|
||||||
|
|
||||||
|
def options
|
||||||
|
{
|
||||||
|
"Guest" => GUEST,
|
||||||
|
"Reporter" => REPORTER,
|
||||||
|
"Developer" => DEVELOPER,
|
||||||
|
"Master" => MASTER,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def options_with_owner
|
||||||
|
options.merge(
|
||||||
|
"Owner" => OWNER
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def sym_options
|
||||||
|
{
|
||||||
|
guest: GUEST,
|
||||||
|
reporter: REPORTER,
|
||||||
|
developer: DEVELOPER,
|
||||||
|
master: MASTER,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def human_access
|
||||||
|
Gitlab::Access.options_with_owner.key(access_field)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -250,7 +250,7 @@ describe Notify do
|
||||||
should have_body_text /#{project.name}/
|
should have_body_text /#{project.name}/
|
||||||
end
|
end
|
||||||
it 'contains new user role' do
|
it 'contains new user role' do
|
||||||
should have_body_text /#{users_project.project_access_human}/
|
should have_body_text /#{users_project.human_access}/
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue