user groups are supported

This commit is contained in:
Karel Picman 2017-06-06 13:22:03 +02:00
parent e6b93fee87
commit dcbd8261da
7 changed files with 34 additions and 23 deletions

View File

@ -245,8 +245,7 @@ class DmsfController < ApplicationController
@parent = @folder.dmsf_folder
@pathfolder = copy_folder(@folder)
@force_file_unlock_allowed = User.current.allowed_to?(:force_file_unlock, @project)
@users = User.find(@folder.dmsf_folder_permissions.users.map{ |p| p.object_id })
@users.delete_if{ |u| !u.active? }
@users = Principal.active.where(:id => @folder.dmsf_folder_permissions.users.map{ |p| p.object_id })
end
def save

View File

@ -32,16 +32,17 @@ class DmsfFolderPermissionsController < ApplicationController
end
def new
@users = users_for_new_users
@principals = users_for_new_users
end
def append
@users = User.active.visible.where(:id => params[:user_ids]).to_a
render :nothing => true if @users.blank?
#@principals = User.active.visible.where(:id => params[:user_ids]).to_a
@principals = Principal.where(:id => params[:user_ids]).to_a
render :nothing => true if @principals.blank?
end
def autocomplete_for_user
@users = users_for_new_users
@principals = users_for_new_users
respond_to do |format|
format.js
end
@ -50,12 +51,13 @@ class DmsfFolderPermissionsController < ApplicationController
private
def users_for_new_users
if params[:q].blank? && @project.present?
scope = @project.users
else
scope = User.all.limit(100)
end
scope.active.visible.sorted.like(params[:q]).to_a
#if params[:q].blank? && @project.present?
# scope = @project.users
#else
# scope = User.all.limit(100)
#end
#scope.active.visible.sorted.like(params[:q]).to_a
Principal.active.visible.member_of(@project).like(params[:q]).order(:type, :lastname).to_a
end
def find_project

View File

@ -88,11 +88,16 @@ class DmsfFolder < ActiveRecord::Base
def self.visible_condition(system=true)
Project.allowed_to_condition(User.current, :view_dmsf_folders) do |role, user|
if user.id && user.logged?
permissions = "#{DmsfFolderPermission.table_name}"
folders = "#{DmsfFolder.table_name}"
group_ids = user.groups.map{ |g| g.id }.join(',')
group_ids = -1 if group_ids.blank?
allowed = (system && role.allowed_to?(:display_system_folders)) ? 1 : 0
%{
((#{DmsfFolderPermission.table_name}.object_id IS NULL) OR
((#{DmsfFolderPermission.table_name}.object_id = #{role.id} AND #{DmsfFolderPermission.table_name}.object_type = 'Role')) OR
((#{DmsfFolderPermission.table_name}.object_id = #{user.id} AND #{DmsfFolderPermission.table_name}.object_type = 'User'))) AND
((#{DmsfFolder.table_name}.system = 0 OR 1 = #{(system && role.allowed_to?(:display_system_folders)) ? 1 : 0}))
(#{permissions}.object_id IS NULL) OR
(#{permissions}.object_id = #{role.id} AND #{permissions}.object_type = 'Role') OR
((#{permissions}.object_id = #{user.id} OR #{permissions}.object_id IN (#{group_ids})) AND #{permissions}.object_type = 'User') AND
(#{folders}.system = 0 OR 1 = #{allowed})
}
else
'0 = 1'
@ -113,7 +118,12 @@ class DmsfFolder < ActiveRecord::Base
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 (role_ids & role_permission_ids).any? || folder.dmsf_folder_permissions.users.map{ |p| p.object_id }.include?(User.current.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
end

View File

@ -12,7 +12,7 @@
:project_id => @project) }')" %>
<div id="users_for_watcher">
<%= render_principals_for_new_folder_permissions(@users) %>
<%= render_principals_for_new_folder_permissions(@principals) %>
</div>
<p class="buttons">

View File

@ -1,4 +1,4 @@
<% @users.each do |user| %>
$("#user_permission_ids_<%= user.id %>").remove();
<% @principals.each do |principal| %>
$("#user_permission_ids_<%= principal.id %>").remove();
<% end %>
$('#user_permissions').append('<%= escape_javascript(users_checkboxes(@users)) %>');
$('#user_permissions').append('<%= escape_javascript(users_checkboxes(@principals)) %>');

View File

@ -1,2 +1,2 @@
$('#users_for_watcher').html('<%= escape_javascript(
render_principals_for_new_folder_permissions(@users)) %>');
render_principals_for_new_folder_permissions(@principals)) %>');

View File

@ -1,3 +1,3 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'dmsf_folder_permissions/new', :locals => {:users => @users}) %>');
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'dmsf_folder_permissions/new') %>');
showModal('ajax-modal', '400px');
$('#ajax-modal').addClass('new-user');