project_member_policy.rb 681 Bytes
Newer Older
1 2
# frozen_string_literal: true

3
class ProjectMemberPolicy < BasePolicy
4
  delegate { @subject.project }
5

6 7
  condition(:target_is_owner, scope: :subject) { @subject.user == @subject.project.owner }
  condition(:target_is_self) { @user && @subject.user == @user }
8
  condition(:project_bot) { @subject.user&.project_bot? }
9

10 11
  rule { anonymous }.prevent_all
  rule { target_is_owner }.prevent_all
12

13
  rule { ~project_bot & can?(:admin_project_member) }.policy do
14 15
    enable :update_project_member
    enable :destroy_project_member
16
  end
17

18 19
  rule { project_bot & can?(:admin_project_member) }.enable :destroy_project_bot_member

20
  rule { target_is_self }.enable :destroy_project_member
21
end