Folder permission's issue

This commit is contained in:
Karel Pičman 2019-10-03 15:45:43 +02:00
parent 27104a8241
commit 51c1c79cad
5 changed files with 20 additions and 53 deletions

View File

@ -52,7 +52,7 @@ class DmsfFolderPermissionsController < ApplicationController
scope = Principal.active.visible.member_of(@project).like(params[:q]).order(:type, :lastname) scope = Principal.active.visible.member_of(@project).like(params[:q]).order(:type, :lastname)
if @dmsf_folder if @dmsf_folder
users = @dmsf_folder.permissions_users 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) scope = scope.where(['id NOT IN (?)', ids.join(',')]).order(:type, :lastname)
end end
scope.to_a scope.to_a

View File

@ -24,9 +24,8 @@ module DmsfFolderPermissionsHelper
def users_checkboxes(users) def users_checkboxes(users)
s = '' s = ''
users.each do |user| users.each do |user|
user = [user, false] unless user.is_a?(Array) content = check_box_tag('permissions[user_ids][]', user.id, true, id: nil) + user.name
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.id}", class: 'inline')
s << content_tag(:label, content, id: "user_permission_ids_#{user[0].id}", class: 'inline')
end end
s.html_safe s.html_safe
end end

View File

@ -109,19 +109,17 @@ class DmsfFolder < ActiveRecord::Base
return false if folder.issue && !folder.issue.visible?(User.current) return false if folder.issue && !folder.issue.visible?(User.current)
end end
# Permissions? # Permissions?
if !folder.dmsf_folder || DmsfFolder.permissions?(folder.dmsf_folder, allow_system) if folder.dmsf_folder_permissions.any?
if folder.dmsf_folder_permissions.any? role_ids = User.current.roles_for_project(folder.project).map{ |r| r.id }
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 }
role_permission_ids = folder.dmsf_folder_permissions.roles.map{ |p| p.object_id } return true if (role_ids & role_permission_ids).any?
return true if (role_ids & role_permission_ids).any? principal_ids = folder.dmsf_folder_permissions.users.map{ |p| p.object_id }
principal_ids = folder.dmsf_folder_permissions.users.map{ |p| p.object_id } return true if principal_ids.include?(User.current.id)
return true if principal_ids.include?(User.current.id) user_group_ids = User.current.groups.map{ |g| g.id }
user_group_ids = User.current.groups.map{ |g| g.id } return true if (principal_ids & user_group_ids).any?
return true if (principal_ids & user_group_ids).any? return false
return false
end
end end
true DmsfFolder.permissions?(folder.dmsf_folder, allow_system)
end end
def default_values def default_values
@ -531,42 +529,15 @@ class DmsfFolder < ActiveRecord::Base
end end
def permission_for_role(role) def permission_for_role(role)
options = Hash.new self.dmsf_folder_permissions.roles.exists?(object_id: role.id)
options[:checked] = false
options[:disabled] = false
permission_for_role_recursive(self, role, options)
options[:disabled] = false unless options[:checked]
options.values
end end
def permissions_users def permissions_users
users = Array.new Principal.active.where(id: self.dmsf_folder_permissions.users.map{ |p| p.object_id })
permissions_users_recursive(self, users, false)
users
end end
private 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) 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 = DmsfFolder.where(project_id: folder.project_id, dmsf_folder_id: folder.id).notsystem.visible(false).to_a
folders.delete(current_folder) folders.delete(current_folder)

View File

@ -76,10 +76,10 @@
</p> </p>
<p> <p>
<%= label_tag '', l(:label_permissions) %> <%= label_tag '', l(:label_permissions) %>
<% User.current.managed_roles(@project).each do |role| %> <% Role.givable.each do |role| %>
<% checked, disabled = @folder.permission_for_role(role) %> <% checked = @folder.permission_for_role(role) %>
<label class="inline"> <label class="inline">
<%= check_box_tag 'permissions[role_ids][]', role.id, checked, disabled: disabled, id: nil %> <%= check_box_tag 'permissions[role_ids][]', role.id, checked, id: nil %>
<%= role %> <%= role %>
</label> </label>
<% end %> <% end %>

View File

@ -191,16 +191,13 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
end end
def test_permission_for_role def test_permission_for_role
checked, disabled = @folder7.permission_for_role(@manager_role) checked = @folder7.permission_for_role(@manager_role)
assert checked assert checked
assert !disabled
end end
def test_permissions_users def test_permissions_users
users = @folder7.permissions_users users = @folder7.permissions_users
assert users.any? assert_equal 1, users.size
assert users[0]
assert !users[1]
end end
end end