Cannot unlock a folder despite :force_file_unlock permission #1265

This commit is contained in:
karel.picman@lbcfree.net 2021-06-22 09:49:06 +02:00
parent 7c45b8a752
commit 30664c84dc
3 changed files with 20 additions and 3 deletions

View File

@ -39,8 +39,8 @@ class DmsfContextMenusController < ApplicationController
@locked = @dmsf_folder.locked? @locked = @dmsf_folder.locked?
@project = @dmsf_folder.project @project = @dmsf_folder.project
@allowed = User.current.allowed_to?(:folder_manipulation, @project) @allowed = User.current.allowed_to?(:folder_manipulation, @project)
@unlockable = @allowed && @dmsf_folder.unlockable? && (!@dmsf_folder.locked_for_user?) && @unlockable = @allowed && @dmsf_folder.unlockable? && (!@dmsf_folder.locked_for_user? ||
User.current.allowed_to?(:force_file_unlock, @project) User.current.allowed_to?(:force_file_unlock, @project))
@email_allowed = User.current.allowed_to?(:email_documents, @project) @email_allowed = User.current.allowed_to?(:email_documents, @project)
elsif @dmsf_link # url link elsif @dmsf_link # url link
@locked = false @locked = false

View File

@ -82,7 +82,7 @@ module RedmineDmsf
def unlockable? def unlockable?
return false unless self.locked? return false unless self.locked?
existing = self.lock(true) existing = self.lock(true)
# If its empty its a folder that's locked (not root) # If it's empty, it's a folder that's locked (not root)
(existing.empty? || (self.dmsf_folder&.locked?)) ? false : true (existing.empty? || (self.dmsf_folder&.locked?)) ? false : true
end end

View File

@ -216,6 +216,23 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
assert_select 'a.icon-del.disabled', text: l(:button_delete) assert_select 'a.icon-del.disabled', text: l(:button_delete)
end end
def test_dmsf_folder_locked_force_unlock_permission_off
@request.session[:user_id] = @dlopper.id
get :dmsf, params: { id: @folder2.project.id, ids: ["folder-#{@folder2.id}"] }
assert_response :success
# @folder2 is locked by @jsmith, therefore @dlopper can't unlock it
assert_select 'a.icon-unlock.disabled', text: l(:button_unlock)
end
def test_dmsf_folder_locked_force_unlock_permission_om
@request.session[:user_id] = @dlopper.id
@role_developer.add_permission! :force_file_unlock
get :dmsf, params: { id: @folder2.project.id, ids: ["folder-#{@folder2.id}"] }
assert_response :success
# @folder2 is locked by @jsmith, but @dlopper can unlock it
assert_select 'a.icon-unlock.disabled', text: l(:button_unlock), count: 0
end
def test_dmsf_folder_notification_on def test_dmsf_folder_notification_on
@folder5.notify_activate @folder5.notify_activate
get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] } get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }