diff options
author | http://jneen.net/ <jneen@jneen.net> | 2016-08-17 02:46:35 +0300 |
---|---|---|
committer | http://jneen.net/ <jneen@jneen.net> | 2016-08-24 03:59:38 +0300 |
commit | 147854472d9c95705cbc0092ebc74ac81fcd2b80 (patch) | |
tree | bda633b4e327f899dcacc8bbb4729af8fb059934 | |
parent | eadb8a80a509b6fd1b47237e8bb9f6111c666930 (diff) |
add personal snippets and project members
-rw-r--r-- | app/policies/personal_snippet_policy.rb | 16 | ||||
-rw-r--r-- | app/policies/project_member_policy.rb | 22 |
2 files changed, 38 insertions, 0 deletions
diff --git a/app/policies/personal_snippet_policy.rb b/app/policies/personal_snippet_policy.rb new file mode 100644 index 00000000000..46c5aa1a5be --- /dev/null +++ b/app/policies/personal_snippet_policy.rb @@ -0,0 +1,16 @@ +class PersonalSnippetPolicy < BasePolicy + def rules + can! :read_personal_snippet if @subject.public? + return unless @user + + if @subject.author == @user + can! :read_personal_snippet + can! :update_personal_snippet + can! :admin_personal_snippet + end + + if @subject.internal? && !@user.external? + can! :read_personal_snippet + end + end +end diff --git a/app/policies/project_member_policy.rb b/app/policies/project_member_policy.rb new file mode 100644 index 00000000000..1c038dddd4b --- /dev/null +++ b/app/policies/project_member_policy.rb @@ -0,0 +1,22 @@ +class ProjectMemberPolicy < BasePolicy + def rules + # anonymous users have no abilities here + return unless @user + + target_user = @subject.user + project = @subject.project + + return if target_user == project.owner + + can_manage = Ability.allowed?(@user, :admin_project_member, project) + + if can_manage + can! :update_project_member + can! :destroy_project_member + end + + if @user == target_user + can! :destroy_project_member + end + end +end |