From 50e2f0730e54c9ee64811d9fb478555d7ca0e2be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Wed, 26 Feb 2020 13:59:11 +0100 Subject: [PATCH] #1080 Menu permissions --- .../dmsf_context_menus_controller.rb | 28 +++++++---- app/controllers/dmsf_controller.rb | 2 - app/models/dmsf_folder.rb | 46 ++++++++++++------- app/models/dmsf_query.rb | 4 +- app/views/dmsf/_query_rows.erb | 2 +- .../_multiple_trash.html.erb | 4 +- app/views/dmsf_context_menus/trash.html.erb | 3 +- 7 files changed, 54 insertions(+), 35 deletions(-) diff --git a/app/controllers/dmsf_context_menus_controller.rb b/app/controllers/dmsf_context_menus_controller.rb index 90897756..ddf949b6 100644 --- a/app/controllers/dmsf_context_menus_controller.rb +++ b/app/controllers/dmsf_context_menus_controller.rb @@ -41,11 +41,16 @@ class DmsfContextMenusController < ApplicationController @unlockable = @allowed && @dmsf_folder.unlockable? && (!@dmsf_folder.locked_for_user?) && User.current.allowed_to?(:force_file_unlock, @project) @email_allowed = User.current.allowed_to?(:email_documents, @project) - elsif @dmsf_link + elsif @dmsf_link # url link + @locked = false + @unlockable = false @allowed = User.current.allowed_to? :file_manipulation, @project - else - @allowed = User.current.allowed_to?(:folder_manipulation, @project) && - User.current.allowed_to?(:file_delete, @project) + @email_allowed = false + else # multiple selection + @locked = false + @unlockable = false + @allowed = User.current.allowed_to?(:file_manipulation, @project) && + User.current.allowed_to?(:folder_manipulation, @project) @email_allowed = User.current.allowed_to?(:email_documents, @project) end render layout: false @@ -58,13 +63,16 @@ class DmsfContextMenusController < ApplicationController @allowed_restore = User.current.allowed_to? :file_manipulation, @project @allowed_delete = User.current.allowed_to? :file_delete, @project elsif @dmsf_folder - @allowed = User.current.allowed_to?(:folder_manipulation, @project) - elsif @dmsf_link + @allowed_restore = User.current.allowed_to? :folder_manipulation, @project + @allowed_delete = @allowed_restore + elsif @dmsf_link # url link @allowed_restore = User.current.allowed_to? :file_manipulation, @project @allowed_delete = User.current.allowed_to? :file_delete, @project - else - @allowed = User.current.allowed_to?(:folder_manipulation, @project) && - User.current.allowed_to?(:file_manipulation, @project) + else # multiple selection + @allowed_restore = User.current.allowed_to?(:file_manipulation, @project) && + User.current.allowed_to?(:folder_manipulation, @project) + @allowed_delete = User.current.allowed_to?(:file_delete, @project) && + User.current.allowed_to?(:folder_manipulation, @project) end render layout: false rescue ActiveRecord::RecordNotFound @@ -87,7 +95,7 @@ class DmsfContextMenusController < ApplicationController @dmsf_file = DmsfFile.find_by(id: $1) elsif params[:ids][0] =~ /(file|url)-link-(\d+)/ @dmsf_link = DmsfLink.find_by(id: $2) - @dmsf_file = DmsfFile.find_by(id: @dmsf_link.target_id) if @dmsf_link && @dmsf_link.target_type != 'DmsfUrl' + @dmsf_file = DmsfFile.find_by(id: @dmsf_link.target_id) if @dmsf_link && (@dmsf_link.target_type != 'DmsfUrl') end end end diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index d8fc682f..09c1b8ee 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -105,7 +105,6 @@ class DmsfController < ApplicationController format.html { @dmsf_count = @query.dmsf_count @dmsf_pages = Paginator.new @dmsf_count, per_page_option, params['page'] - #@dmsf_nodes = @query.dmsf_nodes(offset: @dmsf_pages.offset, limit: @dmsf_pages.per_page) render layout: !request.xhr? } format.api @@ -151,7 +150,6 @@ class DmsfController < ApplicationController format.html { @dmsf_count = @query.dmsf_count @dmsf_pages = Paginator.new @dmsf_count, per_page_option, params['page'] - #@dmsf_nodes = @query.dmsf_nodes(offset: @dmsf_pages.offset, limit: @dmsf_pages.per_page) render layout: !request.xhr? } end diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 25f586e7..5310a411 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -576,24 +576,36 @@ class DmsfFolder < ActiveRecord::Base end end - def css_classes - classes = %w(dmsf_tree) - if type == 'folder' - classes << 'dmsf_collapsed' - classes << 'dmsf-not-loaded' - else - classes << 'dmsf_child' - end - if title =~ /^\./ - classes << 'dmsf_system' - else - classes << 'hascontextmenu' - classes << 'dmsf-draggable' - if type =~ /^folder/ - classes << 'dmsf-droppable' + def css_classes(trash) + classes = [] + if trash + if title =~ /^\./ + classes << 'dmsf_system' + else + classes << 'hascontextmenu' + if type =~ /link$/ + classes << 'dmsf_gray' + end end - if type =~ /link$/ - classes << 'dmsf_gray' + else + classes << 'dmsf_tree' + if type == 'folder' + classes << 'dmsf_collapsed' + classes << 'dmsf-not-loaded' + else + classes << 'dmsf_child' + end + if title =~ /^\./ + classes << 'dmsf_system' + else + classes << 'hascontextmenu' + classes << 'dmsf-draggable' + if type =~ /^folder/ + classes << 'dmsf-droppable' + end + if type =~ /link$/ + classes << 'dmsf_gray' + end end end classes.join(' ') diff --git a/app/models/dmsf_query.rb b/app/models/dmsf_query.rb index 7d7df15d..b8596cac 100644 --- a/app/models/dmsf_query.rb +++ b/app/models/dmsf_query.rb @@ -202,7 +202,7 @@ class DmsfQuery < Query end scope = DmsfLink. select(%{ - dmsf_folders.id AS id, + dmsf_links.id AS id, COALESCE(dmsf_folders.project_id, dmsf_links.project_id) AS project_id, NULL AS revision_id, dmsf_links.name AS title, @@ -270,7 +270,7 @@ class DmsfQuery < Query end scope = DmsfLink. select(%{ - dmsf_files.id AS id, + dmsf_links.id AS id, dmsf_files.project_id AS project_id, dmsf_file_revisions.id AS revision_id, dmsf_links.name AS title, diff --git a/app/views/dmsf/_query_rows.erb b/app/views/dmsf/_query_rows.erb index 993b9d24..0feca1ca 100644 --- a/app/views/dmsf/_query_rows.erb +++ b/app/views/dmsf/_query_rows.erb @@ -23,7 +23,7 @@ <% query.dmsf_nodes.each do |node| %> <% system = node.title =~ /^\./ %> <% @idnt ||= 0 %> - "> + "> <%= check_box_tag('ids[]', "#{node.type}-#{node.id}", false, id: nil) unless system %> diff --git a/app/views/dmsf_context_menus/_multiple_trash.html.erb b/app/views/dmsf_context_menus/_multiple_trash.html.erb index 3da86d9e..bcc21aa1 100644 --- a/app/views/dmsf_context_menus/_multiple_trash.html.erb +++ b/app/views/dmsf_context_menus/_multiple_trash.html.erb @@ -22,10 +22,10 @@
  • <%= context_menu_link l(:title_restore), entries_operations_dmsf_path(id: project, folder_id: folder, - ids: params[:ids], restore_entries: true), method: :post, class: 'icon icon-cancel', disabled: !allowed %> + ids: params[:ids], restore_entries: true), method: :post, class: 'icon icon-cancel', disabled: !allowed_restore %>
  • <%= context_menu_link l(:button_delete), entries_operations_dmsf_path(id: project, folder_id: folder, ids: params[:ids], destroy_entries: true), method: :post, class: 'icon icon-del', - data: { confirm: l(:text_are_you_sure) }, id: 'dmsf-cm-delete', disabled: !allowed %> + data: { confirm: l(:text_are_you_sure) }, id: 'dmsf-cm-delete', disabled: !allowed_delete %>
  • diff --git a/app/views/dmsf_context_menus/trash.html.erb b/app/views/dmsf_context_menus/trash.html.erb index ec69d98b..2a7385c6 100644 --- a/app/views/dmsf_context_menus/trash.html.erb +++ b/app/views/dmsf_context_menus/trash.html.erb @@ -29,7 +29,8 @@ <%= render(partial: 'folder_trash', locals: { project: @project, folder: @folder, dmsf_folder: @dmsf_folder, dmsf_link: @dmsf_link, allowed: @allowed }) %> <% else %> - <%= render(partial: 'multiple_trash', locals: { project: @project, folder: @folder, allowed: @allowed }) %> + <%= render(partial: 'multiple_trash', locals: { project: @project, folder: @folder, allowed_delete: @allowed_delete, + allowed_restore: @allowed_restore }) %> <% end %> <%= late_javascript_tag do %>