#1080 Menu permissions

This commit is contained in:
Karel Pičman 2020-02-26 13:59:11 +01:00
parent cea6885293
commit 50e2f0730e
7 changed files with 54 additions and 35 deletions

View File

@ -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

View File

@ -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

View File

@ -576,8 +576,19 @@ class DmsfFolder < ActiveRecord::Base
end
end
def css_classes
classes = %w(dmsf_tree)
def css_classes(trash)
classes = []
if trash
if title =~ /^\./
classes << 'dmsf_system'
else
classes << 'hascontextmenu'
if type =~ /link$/
classes << 'dmsf_gray'
end
end
else
classes << 'dmsf_tree'
if type == 'folder'
classes << 'dmsf_collapsed'
classes << 'dmsf-not-loaded'
@ -596,6 +607,7 @@ class DmsfFolder < ActiveRecord::Base
classes << 'dmsf_gray'
end
end
end
classes.join(' ')
end

View File

@ -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,

View File

@ -23,7 +23,7 @@
<% query.dmsf_nodes.each do |node| %>
<% system = node.title =~ /^\./ %>
<% @idnt ||= 0 %>
<tr id="<%= node.id %>span" class="<%= cycle('odd', 'even') %> <%= node.css_classes %> <%= params[:classes] %> <%= @idnt > 0 ? "idnt idnt-#{@idnt}" : nil %>">
<tr id="<%= node.id %>span" class="<%= cycle('odd', 'even') %> <%= node.css_classes(query.deleted) %> <%= params[:classes] %> <%= @idnt > 0 ? "idnt idnt-#{@idnt}" : nil %>">
<td class="checkbox hide-when-print">
<%= check_box_tag('ids[]', "#{node.type}-#{node.id}", false, id: nil) unless system %>
</td>

View File

@ -22,10 +22,10 @@
<li>
<%= 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 %>
</li>
<li>
<%= 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 %>
</li>

View File

@ -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 %>
</ul>
<%= late_javascript_tag do %>