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