diff options
Diffstat (limited to 'app/policies/project_member_policy.rb')
-rw-r--r-- | app/policies/project_member_policy.rb | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/app/policies/project_member_policy.rb b/app/policies/project_member_policy.rb index 40ba30fce5e..bcfc7c87d41 100644 --- a/app/policies/project_member_policy.rb +++ b/app/policies/project_member_policy.rb @@ -1,13 +1,18 @@ # frozen_string_literal: true class ProjectMemberPolicy < BasePolicy + include MemberPolicyHelpers delegate { @subject.project } condition(:target_is_holder_of_the_personal_namespace, scope: :subject) do @subject.project.personal_namespace_holder?(@subject.user) end - condition(:target_is_self) { @user && @subject.user == @user } + desc "Membership is users' own access request" + with_score 0 + condition(:access_request_of_self) { record_is_access_request_of_self? } + + condition(:target_is_self) { record_belongs_to_self? } condition(:project_bot) { @subject.user&.project_bot? } rule { anonymous }.prevent_all @@ -24,5 +29,11 @@ class ProjectMemberPolicy < BasePolicy rule { project_bot & can?(:admin_project_member) }.enable :destroy_project_bot_member - rule { target_is_self }.enable :destroy_project_member + rule { target_is_self }.policy do + enable :destroy_project_member + end + + rule { access_request_of_self }.policy do + enable :withdraw_member_access_request + end end |