diff --git a/app/policies/personal_snippet_policy.rb b/app/policies/personal_snippet_policy.rb index 40dd49b4afd829f28ef9280f0aad904d945dd295..d5f49b900f1d7562b8a9c8d93ae6d3887044e382 100644 --- a/app/policies/personal_snippet_policy.rb +++ b/app/policies/personal_snippet_policy.rb @@ -2,7 +2,7 @@ class PersonalSnippetPolicy < BasePolicy condition(:public_snippet, scope: :subject) { @subject.public? } - condition(:is_author) { @user && @subject.author == @user } + condition(:is_author) { @user && (@subject.author == @user || @user.admin?) } condition(:internal_snippet, scope: :subject) { @subject.internal? } rule { public_snippet }.policy do diff --git a/changelogs/unreleased/26380-personal-snippets.yml b/changelogs/unreleased/26380-personal-snippets.yml new file mode 100644 index 0000000000000000000000000000000000000000..60426961e92f4d348d90d29afb0987f01364c448 --- /dev/null +++ b/changelogs/unreleased/26380-personal-snippets.yml @@ -0,0 +1,5 @@ +--- +title: Allow admins to administer personal snippets +merge_request: +author: Oren Kanner +type: fixed diff --git a/spec/features/snippets/user_deletes_snippet_spec.rb b/spec/features/snippets/user_deletes_snippet_spec.rb index 217419a220a075ea6d99de29c54cacb2c32d5f8b..b153ffdc315beed86ea1892bc5f529774faae2a2 100644 --- a/spec/features/snippets/user_deletes_snippet_spec.rb +++ b/spec/features/snippets/user_deletes_snippet_spec.rb @@ -4,18 +4,35 @@ describe 'User deletes snippet' do let(:user) { create(:user) } + let(:admin) { create(:admin) } let(:content) { 'puts "test"' } let(:snippet) { create(:personal_snippet, :public, content: content, author: user) } - before do - sign_in(user) + context 'as author' do + before do + sign_in(user) - visit snippet_path(snippet) + visit snippet_path(snippet) + end + + it 'deletes the snippet' do + first(:link, 'Delete').click + + expect(page).not_to have_content(snippet.title) + end end - it 'deletes the snippet' do - first(:link, 'Delete').click + context 'as admin' do + before do + sign_in(admin) + + visit snippet_path(snippet) + end + + it 'deletes the snippet' do + first(:link, 'Delete').click - expect(page).not_to have_content(snippet.title) + expect(page).not_to have_content(snippet.title) + end end end diff --git a/spec/policies/personal_snippet_policy_spec.rb b/spec/policies/personal_snippet_policy_spec.rb index 097000ceb6a4d9cd9b0f3e3baf3de157a32c5e53..418848525c1ea6ac8327753a125496a14195aa45 100644 --- a/spec/policies/personal_snippet_policy_spec.rb +++ b/spec/policies/personal_snippet_policy_spec.rb @@ -133,9 +133,9 @@ def permissions(user) it do is_expected.to be_allowed(:read_personal_snippet) - is_expected.to be_disallowed(:create_note) - is_expected.to be_disallowed(:award_emoji) - is_expected.to be_disallowed(*author_permissions) + is_expected.to be_allowed(:create_note) + is_expected.to be_allowed(:award_emoji) + is_expected.to be_allowed(*author_permissions) end end