summaryrefslogtreecommitdiff
path: root/app/presenters/project_member_presenter.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/presenters/project_member_presenter.rb')
-rw-r--r--app/presenters/project_member_presenter.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/app/presenters/project_member_presenter.rb b/app/presenters/project_member_presenter.rb
index 91d3ae96877..da24972775a 100644
--- a/app/presenters/project_member_presenter.rb
+++ b/app/presenters/project_member_presenter.rb
@@ -3,6 +3,24 @@
class ProjectMemberPresenter < MemberPresenter
presents ::ProjectMember
+ def access_level_roles
+ ProjectMember.permissible_access_level_roles(current_user, source)
+ end
+
+ def can_remove?
+ # If this user is attempting to manage an Owner member and doesn't have permission, do not allow
+ return can_manage_owners? if member.owner?
+
+ super
+ end
+
+ def can_update?
+ # If this user is attempting to manage an Owner member and doesn't have permission, do not allow
+ return can_manage_owners? if member.owner?
+
+ super
+ end
+
private
def admin_member_permission
@@ -16,6 +34,10 @@ class ProjectMemberPresenter < MemberPresenter
def destroy_member_permission
:destroy_project_member
end
+
+ def can_manage_owners?
+ can?(current_user, :manage_owners, source)
+ end
end
ProjectMemberPresenter.prepend_mod_with('ProjectMemberPresenter')