#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?) && @unlockable = @allowed && @dmsf_folder.unlockable? && (!@dmsf_folder.locked_for_user?) &&
User.current.allowed_to?(:force_file_unlock, @project) User.current.allowed_to?(:force_file_unlock, @project)
@email_allowed = User.current.allowed_to?(:email_documents, @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 @allowed = User.current.allowed_to? :file_manipulation, @project
else @email_allowed = false
@allowed = User.current.allowed_to?(:folder_manipulation, @project) && else # multiple selection
User.current.allowed_to?(:file_delete, @project) @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) @email_allowed = User.current.allowed_to?(:email_documents, @project)
end end
render layout: false render layout: false
@ -58,13 +63,16 @@ class DmsfContextMenusController < ApplicationController
@allowed_restore = User.current.allowed_to? :file_manipulation, @project @allowed_restore = User.current.allowed_to? :file_manipulation, @project
@allowed_delete = User.current.allowed_to? :file_delete, @project @allowed_delete = User.current.allowed_to? :file_delete, @project
elsif @dmsf_folder elsif @dmsf_folder
@allowed = User.current.allowed_to?(:folder_manipulation, @project) @allowed_restore = User.current.allowed_to? :folder_manipulation, @project
elsif @dmsf_link @allowed_delete = @allowed_restore
elsif @dmsf_link # url link
@allowed_restore = User.current.allowed_to? :file_manipulation, @project @allowed_restore = User.current.allowed_to? :file_manipulation, @project
@allowed_delete = User.current.allowed_to? :file_delete, @project @allowed_delete = User.current.allowed_to? :file_delete, @project
else else # multiple selection
@allowed = User.current.allowed_to?(:folder_manipulation, @project) && @allowed_restore = User.current.allowed_to?(:file_manipulation, @project) &&
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 end
render layout: false render layout: false
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
@ -87,7 +95,7 @@ class DmsfContextMenusController < ApplicationController
@dmsf_file = DmsfFile.find_by(id: $1) @dmsf_file = DmsfFile.find_by(id: $1)
elsif params[:ids][0] =~ /(file|url)-link-(\d+)/ elsif params[:ids][0] =~ /(file|url)-link-(\d+)/
@dmsf_link = DmsfLink.find_by(id: $2) @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 end
end end

View File

@ -105,7 +105,6 @@ class DmsfController < ApplicationController
format.html { format.html {
@dmsf_count = @query.dmsf_count @dmsf_count = @query.dmsf_count
@dmsf_pages = Paginator.new @dmsf_count, per_page_option, params['page'] @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? render layout: !request.xhr?
} }
format.api format.api
@ -151,7 +150,6 @@ class DmsfController < ApplicationController
format.html { format.html {
@dmsf_count = @query.dmsf_count @dmsf_count = @query.dmsf_count
@dmsf_pages = Paginator.new @dmsf_count, per_page_option, params['page'] @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? render layout: !request.xhr?
} }
end end

View File

@ -576,24 +576,36 @@ class DmsfFolder < ActiveRecord::Base
end end
end end
def css_classes def css_classes(trash)
classes = %w(dmsf_tree) classes = []
if type == 'folder' if trash
classes << 'dmsf_collapsed' if title =~ /^\./
classes << 'dmsf-not-loaded' classes << 'dmsf_system'
else else
classes << 'dmsf_child' classes << 'hascontextmenu'
end if type =~ /link$/
if title =~ /^\./ classes << 'dmsf_gray'
classes << 'dmsf_system' end
else
classes << 'hascontextmenu'
classes << 'dmsf-draggable'
if type =~ /^folder/
classes << 'dmsf-droppable'
end end
if type =~ /link$/ else
classes << 'dmsf_gray' 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
end end
classes.join(' ') classes.join(' ')

View File

@ -202,7 +202,7 @@ class DmsfQuery < Query
end end
scope = DmsfLink. scope = DmsfLink.
select(%{ select(%{
dmsf_folders.id AS id, dmsf_links.id AS id,
COALESCE(dmsf_folders.project_id, dmsf_links.project_id) AS project_id, COALESCE(dmsf_folders.project_id, dmsf_links.project_id) AS project_id,
NULL AS revision_id, NULL AS revision_id,
dmsf_links.name AS title, dmsf_links.name AS title,
@ -270,7 +270,7 @@ class DmsfQuery < Query
end end
scope = DmsfLink. scope = DmsfLink.
select(%{ select(%{
dmsf_files.id AS id, dmsf_links.id AS id,
dmsf_files.project_id AS project_id, dmsf_files.project_id AS project_id,
dmsf_file_revisions.id AS revision_id, dmsf_file_revisions.id AS revision_id,
dmsf_links.name AS title, dmsf_links.name AS title,

View File

@ -23,7 +23,7 @@
<% query.dmsf_nodes.each do |node| %> <% query.dmsf_nodes.each do |node| %>
<% system = node.title =~ /^\./ %> <% system = node.title =~ /^\./ %>
<% @idnt ||= 0 %> <% @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"> <td class="checkbox hide-when-print">
<%= check_box_tag('ids[]', "#{node.type}-#{node.id}", false, id: nil) unless system %> <%= check_box_tag('ids[]', "#{node.type}-#{node.id}", false, id: nil) unless system %>
</td> </td>

View File

@ -22,10 +22,10 @@
<li> <li>
<%= context_menu_link l(:title_restore), entries_operations_dmsf_path(id: project, folder_id: folder, <%= 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>
<li> <li>
<%= context_menu_link l(:button_delete), entries_operations_dmsf_path(id: project, folder_id: folder, <%= 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', 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> </li>

View File

@ -29,7 +29,8 @@
<%= render(partial: 'folder_trash', locals: { project: @project, folder: @folder, dmsf_folder: @dmsf_folder, <%= render(partial: 'folder_trash', locals: { project: @project, folder: @folder, dmsf_folder: @dmsf_folder,
dmsf_link: @dmsf_link, allowed: @allowed }) %> dmsf_link: @dmsf_link, allowed: @allowed }) %>
<% else %> <% 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 %> <% end %>
</ul> </ul>
<%= late_javascript_tag do %> <%= late_javascript_tag do %>