From 51c1c79cad50c8de09c0ec78cae2cedd8bf3c7b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Thu, 3 Oct 2019 15:45:43 +0200 Subject: [PATCH] Folder permission's issue --- .../dmsf_folder_permissions_controller.rb | 2 +- app/helpers/dmsf_folder_permissions_helper.rb | 5 +- app/models/dmsf_folder.rb | 53 +++++-------------- app/views/dmsf/edit.html.erb | 6 +-- test/unit/dmsf_folder_test.rb | 7 +-- 5 files changed, 20 insertions(+), 53 deletions(-) diff --git a/app/controllers/dmsf_folder_permissions_controller.rb b/app/controllers/dmsf_folder_permissions_controller.rb index 1323f7e8..ad5b7e41 100644 --- a/app/controllers/dmsf_folder_permissions_controller.rb +++ b/app/controllers/dmsf_folder_permissions_controller.rb @@ -52,7 +52,7 @@ class DmsfFolderPermissionsController < ApplicationController scope = Principal.active.visible.member_of(@project).like(params[:q]).order(:type, :lastname) if @dmsf_folder users = @dmsf_folder.permissions_users - ids = users.collect{ |u| u[0].id } + ids = users.collect{ |u| u.id } scope = scope.where(['id NOT IN (?)', ids.join(',')]).order(:type, :lastname) end scope.to_a diff --git a/app/helpers/dmsf_folder_permissions_helper.rb b/app/helpers/dmsf_folder_permissions_helper.rb index 46a3f420..29a8bed9 100644 --- a/app/helpers/dmsf_folder_permissions_helper.rb +++ b/app/helpers/dmsf_folder_permissions_helper.rb @@ -24,9 +24,8 @@ module DmsfFolderPermissionsHelper def users_checkboxes(users) s = '' users.each do |user| - user = [user, false] unless user.is_a?(Array) - content = check_box_tag('permissions[user_ids][]', user[0].id, true, disabled: user[1], id: nil) + user[0].name - s << content_tag(:label, content, id: "user_permission_ids_#{user[0].id}", class: 'inline') + content = check_box_tag('permissions[user_ids][]', user.id, true, id: nil) + user.name + s << content_tag(:label, content, id: "user_permission_ids_#{user.id}", class: 'inline') end s.html_safe end diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index d1951b55..5196b5f8 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -109,19 +109,17 @@ class DmsfFolder < ActiveRecord::Base return false if folder.issue && !folder.issue.visible?(User.current) end # Permissions? - if !folder.dmsf_folder || DmsfFolder.permissions?(folder.dmsf_folder, allow_system) - if folder.dmsf_folder_permissions.any? - role_ids = User.current.roles_for_project(folder.project).map{ |r| r.id } - role_permission_ids = folder.dmsf_folder_permissions.roles.map{ |p| p.object_id } - return true if (role_ids & role_permission_ids).any? - principal_ids = folder.dmsf_folder_permissions.users.map{ |p| p.object_id } - return true if principal_ids.include?(User.current.id) - user_group_ids = User.current.groups.map{ |g| g.id } - return true if (principal_ids & user_group_ids).any? - return false - end + if folder.dmsf_folder_permissions.any? + role_ids = User.current.roles_for_project(folder.project).map{ |r| r.id } + role_permission_ids = folder.dmsf_folder_permissions.roles.map{ |p| p.object_id } + return true if (role_ids & role_permission_ids).any? + principal_ids = folder.dmsf_folder_permissions.users.map{ |p| p.object_id } + return true if principal_ids.include?(User.current.id) + user_group_ids = User.current.groups.map{ |g| g.id } + return true if (principal_ids & user_group_ids).any? + return false end - true + DmsfFolder.permissions?(folder.dmsf_folder, allow_system) end def default_values @@ -531,42 +529,15 @@ class DmsfFolder < ActiveRecord::Base end def permission_for_role(role) - options = Hash.new - options[:checked] = false - options[:disabled] = false - permission_for_role_recursive(self, role, options) - options[:disabled] = false unless options[:checked] - options.values + self.dmsf_folder_permissions.roles.exists?(object_id: role.id) end def permissions_users - users = Array.new - permissions_users_recursive(self, users, false) - users + Principal.active.where(id: self.dmsf_folder_permissions.users.map{ |p| p.object_id }) end private - def permission_for_role_recursive(folder, role, options) - options[:checked] = folder.dmsf_folder_permissions.roles.exists?(object_id: role.id) - if !options[:checked] && folder.dmsf_folder && !folder.dmsf_folder.deleted? - options[:disabled] = true - # TODO: No inheritance - #permission_for_role_recursive(folder.dmsf_folder, role, options) - end - end - - def permissions_users_recursive(folder, users, disabled) - if folder - usrs = Principal.active.where(id: folder.dmsf_folder_permissions.users.map{ |p| p.object_id }) - usrs.each do |u| - users << [u, disabled] - end - # TODO: No inheritance - #permissions_users_recursive(folder.dmsf_folder, users, true) - end - end - def self.directory_subtree(tree, folder, level, current_folder) folders = DmsfFolder.where(project_id: folder.project_id, dmsf_folder_id: folder.id).notsystem.visible(false).to_a folders.delete(current_folder) diff --git a/app/views/dmsf/edit.html.erb b/app/views/dmsf/edit.html.erb index 519a4fb7..08c4083e 100644 --- a/app/views/dmsf/edit.html.erb +++ b/app/views/dmsf/edit.html.erb @@ -76,10 +76,10 @@

<%= label_tag '', l(:label_permissions) %> - <% User.current.managed_roles(@project).each do |role| %> - <% checked, disabled = @folder.permission_for_role(role) %> + <% Role.givable.each do |role| %> + <% checked = @folder.permission_for_role(role) %> <% end %> diff --git a/test/unit/dmsf_folder_test.rb b/test/unit/dmsf_folder_test.rb index 03a76ad9..9100f7dd 100644 --- a/test/unit/dmsf_folder_test.rb +++ b/test/unit/dmsf_folder_test.rb @@ -191,16 +191,13 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest end def test_permission_for_role - checked, disabled = @folder7.permission_for_role(@manager_role) + checked = @folder7.permission_for_role(@manager_role) assert checked - assert !disabled end def test_permissions_users users = @folder7.permissions_users - assert users.any? - assert users[0] - assert !users[1] + assert_equal 1, users.size end end \ No newline at end of file