mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-02 09:54:37 +08:00
Merge pull request #3057 from okriuchykhin/ok_SCI_5317
Add project permissions check to projects toolbar [SCI-5317]
This commit is contained in:
commit
962b3a532e
5 changed files with 40 additions and 14 deletions
|
@ -11,6 +11,7 @@
|
||||||
dropdownSelector Sidebar Turbolinks */
|
dropdownSelector Sidebar Turbolinks */
|
||||||
|
|
||||||
(function(global) {
|
(function(global) {
|
||||||
|
const PERMISSIONS = ['editable', 'archivable', 'restorable'];
|
||||||
var toolbarWrapper = '#toolbarWrapper';
|
var toolbarWrapper = '#toolbarWrapper';
|
||||||
var editProjectModal = '#edit-modal';
|
var editProjectModal = '#edit-modal';
|
||||||
|
|
||||||
|
@ -300,22 +301,35 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkActionPermission(permission) {
|
||||||
|
return selectedProjects.every(function(projectId) {
|
||||||
|
return $(`.project-card[data-id="${projectId}"]`).data(permission);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function updateProjectsToolbar() {
|
function updateProjectsToolbar() {
|
||||||
let projectsToolbar = $('#projectsToolbar');
|
let projectsToolbar = $('#projectsToolbar');
|
||||||
|
|
||||||
if (selectedProjects.length === 0 && selectedProjectFolders.length === 0) {
|
if (selectedProjects.length === 0 && selectedProjectFolders.length === 0) {
|
||||||
projectsToolbar.find('.single-object-action, .multiple-object-action').addClass('hidden');
|
projectsToolbar.find('.single-object-action, .multiple-object-action').addClass('hidden');
|
||||||
} else if (selectedProjects.length + selectedProjectFolders.length === 1) {
|
|
||||||
projectsToolbar.find('.single-object-action, .multiple-object-action').removeClass('hidden');
|
|
||||||
if (selectedProjectFolders.length === 1) {
|
|
||||||
projectsToolbar.find('.project-only-action').addClass('hidden');
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
projectsToolbar.find('.single-object-action').addClass('hidden');
|
if (selectedProjects.length + selectedProjectFolders.length === 1) {
|
||||||
projectsToolbar.find('.multiple-object-action').removeClass('hidden');
|
projectsToolbar.find('.single-object-action, .multiple-object-action').removeClass('hidden');
|
||||||
if (selectedProjectFolders.length > 0) {
|
if (selectedProjectFolders.length === 1) {
|
||||||
projectsToolbar.find('.project-only-action').addClass('hidden');
|
projectsToolbar.find('.project-only-action').addClass('hidden');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
projectsToolbar.find('.single-object-action').addClass('hidden');
|
||||||
|
projectsToolbar.find('.multiple-object-action').removeClass('hidden');
|
||||||
|
if (selectedProjectFolders.length > 0) {
|
||||||
|
projectsToolbar.find('.project-only-action').addClass('hidden');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
PERMISSIONS.forEach((permission) => {
|
||||||
|
if (!checkActionPermission(permission)) {
|
||||||
|
projectsToolbar.find(`.btn[data-for="${permission}"]`).addClass('hidden');
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,13 +84,14 @@ class ProjectsOverviewService
|
||||||
@team.projects
|
@team.projects
|
||||||
.visible_to(@user, @team)
|
.visible_to(@user, @team)
|
||||||
.left_outer_joins(:project_comments)
|
.left_outer_joins(:project_comments)
|
||||||
|
.preload(:user_projects, team: :user_teams)
|
||||||
.select('projects.*')
|
.select('projects.*')
|
||||||
.select('COUNT(DISTINCT comments.id) AS comment_count')
|
.select('COUNT(DISTINCT comments.id) AS comment_count')
|
||||||
.group('projects.id')
|
.group('projects.id')
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_project_folder_records
|
def fetch_project_folder_records
|
||||||
project_folders = @team.project_folders.left_outer_joins(:projects, :project_folders)
|
project_folders = @team.project_folders.preload(team: :user_teams).left_outer_joins(:projects, :project_folders)
|
||||||
project_folders.select('project_folders.*')
|
project_folders.select('project_folders.*')
|
||||||
.select('COUNT(DISTINCT projects.id) AS projects_count')
|
.select('COUNT(DISTINCT projects.id) AS projects_count')
|
||||||
.select('COUNT(DISTINCT project_folders.id) AS folders_count')
|
.select('COUNT(DISTINCT project_folders.id) AS folders_count')
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
<div class="card folder-card" data-id="<%= folder.id %>" data-edit-url="<%= edit_project_folder_path(folder) %>">
|
<div class="card folder-card"
|
||||||
|
data-id="<%= folder.id %>"
|
||||||
|
data-edit-url="<%= edit_project_folder_path(folder) %>"
|
||||||
|
data-editable="<%= can_update_team?(current_team) %>"
|
||||||
|
data-archivable="<%= folder.active? && can_update_team?(current_team) %>"
|
||||||
|
data-restorable="<%= folder.archived? && can_update_team?(current_team) %>">
|
||||||
<div class="checkbox-cell">
|
<div class="checkbox-cell">
|
||||||
<div class="sci-checkbox-container">
|
<div class="sci-checkbox-container">
|
||||||
<input value="1" type="checkbox" class="sci-checkbox folder-card-selector">
|
<input value="1" type="checkbox" class="sci-checkbox folder-card-selector">
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
<div class="card project-card" data-id="<%= project.id %>" data-edit-url="<%= edit_project_path(project) %>">
|
<div class="card project-card"
|
||||||
|
data-id="<%= project.id %>"
|
||||||
|
data-edit-url="<%= edit_project_path(project) %>"
|
||||||
|
data-editable="<%= can_manage_project?(project) %>"
|
||||||
|
data-archivable="<%= project.active? && can_archive_project?(project) %>"
|
||||||
|
data-restorable="<%= project.archived? && can_restore_project?(project) %>">
|
||||||
<div class="checkbox-cell">
|
<div class="checkbox-cell">
|
||||||
<div class="sci-checkbox-container">
|
<div class="sci-checkbox-container">
|
||||||
<input value="1" type="checkbox" class="sci-checkbox project-card-selector">
|
<input value="1" type="checkbox" class="sci-checkbox project-card-selector">
|
||||||
|
|
|
@ -19,17 +19,18 @@
|
||||||
<span class="hidden-xs"><%= t('projects.index.new_folder') %></span>
|
<span class="hidden-xs"><%= t('projects.index.new_folder') %></span>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<a href="#" class="btn btn-light edit-btn single-object-action hidden" data-view-mode="active">
|
<a href="#" class="btn btn-secondary edit-btn single-object-action hidden" data-for="editable" data-view-mode="active">
|
||||||
<span class="fas fa-folder" aria-hidden="true"></span>
|
<span class="fas fa-folder" aria-hidden="true"></span>
|
||||||
<span class="hidden-xs"><%= t('projects.index.edit_button') %></span>
|
<span class="hidden-xs"><%= t('projects.index.edit_button') %></span>
|
||||||
</a>
|
</a>
|
||||||
<a href="#" class="btn btn-light move-projects-btn multiple-object-action hidden">
|
<a href="#" class="btn btn-light move-projects-btn multiple-object-action hidden" data-for="editable">
|
||||||
<span class="fas fa-arrow-right" aria-hidden="true"></span>
|
<span class="fas fa-arrow-right" aria-hidden="true"></span>
|
||||||
<span class="hidden-xs"><%= t('projects.index.move_button') %></span>
|
<span class="hidden-xs"><%= t('projects.index.move_button') %></span>
|
||||||
</a>
|
</a>
|
||||||
<%= button_to archive_group_projects_path,
|
<%= button_to archive_group_projects_path,
|
||||||
class: 'btn btn-light archive-projects-btn multiple-object-action project-only-action hidden',
|
class: 'btn btn-light archive-projects-btn multiple-object-action project-only-action hidden',
|
||||||
form_class: 'archive-projects-form',
|
form_class: 'archive-projects-form',
|
||||||
|
data: { for: :archivable },
|
||||||
remote: true,
|
remote: true,
|
||||||
method: :post do %>
|
method: :post do %>
|
||||||
<span class="fas fa-archive" aria-hidden="true"></span>
|
<span class="fas fa-archive" aria-hidden="true"></span>
|
||||||
|
|
Loading…
Add table
Reference in a new issue