refactor manage repository row permissions

This commit is contained in:
mlorb 2017-12-12 14:30:28 +01:00
parent 740ecc674b
commit 079ac7a4d3
4 changed files with 31 additions and 39 deletions

View file

@ -5,10 +5,7 @@ class RepositoryRowsController < ApplicationController
before_action :load_vars, only: %i(edit update)
before_action :load_repository, only: %i(create delete_records)
before_action :check_create_permissions, only: :create
before_action :check_edit_permissions, only: %i(edit update)
before_action :check_destroy_permissions, only: :delete_records
before_action :check_permissions
def create
record = RepositoryRow.new(repository: @repository,
@ -172,9 +169,7 @@ class RepositoryRowsController < ApplicationController
if params[:selected_rows]
params[:selected_rows].each do |row_id|
row = @repository.repository_rows.find_by_id(row_id)
if row && can_delete_repository_record(row)
row.destroy && deleted_count += 1
end
row.destroy && deleted_count += 1 if row
end
if deleted_count.zero?
flash = t('repositories.destroy.no_deleted_records_flash',
@ -218,16 +213,8 @@ class RepositoryRowsController < ApplicationController
render_404 unless @repository
end
def check_create_permissions
render_403 unless can_create_repository_records(@repository)
end
def check_edit_permissions
render_403 unless can_edit_repository_record(@record)
end
def check_destroy_permissions
render_403 unless can_delete_repository_records(@repository)
def check_permissions
render_403 unless can_manage_repository_row?(@repository.team)
end
def record_params

View file

@ -1077,35 +1077,35 @@ module PermissionHelper
is_admin_of_team(column.repository.team)
end
def can_create_repository_records(repository)
is_normal_user_or_admin_of_team(repository.team)
end
# def can_create_repository_records(repository)
# is_normal_user_or_admin_of_team(repository.team)
# end
def can_import_repository_records(repository)
is_normal_user_or_admin_of_team(repository.team)
end
# def can_import_repository_records(repository)
# is_normal_user_or_admin_of_team(repository.team)
# end
def can_edit_repository_record(record)
is_normal_user_or_admin_of_team(record.repository.team)
end
# def can_edit_repository_record(record)
# is_normal_user_or_admin_of_team(record.repository.team)
# end
def can_delete_repository_records(repository)
is_normal_user_or_admin_of_team(repository.team)
end
# def can_delete_repository_records(repository)
# is_normal_user_or_admin_of_team(repository.team)
# end
def can_delete_repository_record(record)
team = record.repository.team
is_admin_of_team(team) || (is_normal_user_of_team(team) &&
record.created_by == current_user)
end
# def can_delete_repository_record(record)
# team = record.repository.team
# is_admin_of_team(team) || (is_normal_user_of_team(team) &&
# record.created_by == current_user)
# end
def can_assign_repository_records(my_module, repository)
can_delete_repository_records(repository) &&
is_normal_user_or_admin_of_team(repository.team) &&
is_technician_or_higher_of_project(my_module.experiment.project)
end
def can_unassign_repository_records(my_module, repository)
can_delete_repository_records(repository) &&
is_normal_user_or_admin_of_team(repository.team) &&
is_technician_or_higher_of_project(my_module.experiment.project)
end
end

View file

@ -34,6 +34,11 @@ Canaid::Permissions.register_for(Team) do
can :manage_sample_elements do |user, team|
user.is_normal_user_or_admin_of_team?(team)
end
# create, import, edit, delete repository record
can :manage_repository_row do |user, team|
user.is_normal_user_or_admin_of_team?(team)
end
end
Canaid::Permissions.register_for(UserTeam) do

View file

@ -7,13 +7,13 @@
<div id="repository-toolbar">
<% if can_create_repository_records(repository) %>
<% if can_manage_repository_row?(repository.team) %>
<button type="button" class="btn btn-default editAdd" id="addRepositoryRecord" onclick="onClickAddRecord()">
<span class="glyphicon glyphicon-plus"></span>
<span class="hidden-xs"><%= t("repositories.add_new_record") %></span>
</button>
<% end %>
<% if can_import_repository_records(repository) %>
<% if can_manage_repository_row?(repository.team) %>
<button type="button" class="btn btn-default" id="importRecordsButton">
<span class="glyphicon glyphicon-cloud-upload"></span>
<span class="hidden-xs"><%= t('repositories.import_records.import') %></span>
@ -117,7 +117,7 @@
<span class="hidden-xs-custom"><%= t("repositories.edit_record") %></span>
</button>
<% if can_delete_repository_records(repository) %>
<% if can_manage_repository_row?(repository.team) %>
<button type="button" class="btn btn-default"
id="deleteRepositoryRecordsButton" data-target="#deleteRepositoryRecord" data-toggle="modal" disabled>
<span class="glyphicon glyphicon-trash"></span>