From 0d37f9c85af48cd56c96ab2f95d46a7e5c03d5c5 Mon Sep 17 00:00:00 2001 From: mlorb Date: Thu, 7 Dec 2017 11:11:27 +0100 Subject: [PATCH] refactor clone protocol permission --- app/controllers/protocols_controller.rb | 2 +- app/datatables/protocols_datatable.rb | 6 +++--- app/helpers/permission_helper.rb | 14 +++++++------- app/permissions/team.rb | 6 ++++++ 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/controllers/protocols_controller.rb b/app/controllers/protocols_controller.rb index 80fac2d26..8a01e2977 100644 --- a/app/controllers/protocols_controller.rb +++ b/app/controllers/protocols_controller.rb @@ -926,7 +926,7 @@ class ProtocolsController < ApplicationController @original = Protocol.find_by_id(params[:id]) if @original.blank? || - !can_clone_protocol(@original) || @type == :archive + !can_clone_protocol?(@original) || @type == :archive render_403 end end diff --git a/app/datatables/protocols_datatable.rb b/app/datatables/protocols_datatable.rb index c181236c6..ef7b8574e 100644 --- a/app/datatables/protocols_datatable.rb +++ b/app/datatables/protocols_datatable.rb @@ -5,7 +5,7 @@ class ProtocolsDatatable < CustomDatatable def_delegator :@view, :can_update_protocol_in_repository? def_delegator :@view, :edit_protocol_path - def_delegator :@view, :can_clone_protocol + def_delegator :@view, :can_clone_protocol? def_delegator :@view, :clone_protocol_path def_delegator :@view, :can_update_protocol_type_in_repository? def_delegator :@view, :can_read_protocol_in_repository? @@ -88,8 +88,8 @@ class ProtocolsDatatable < CustomDatatable team: @team, type: @type) end, - 'DT_CanClone': can_clone_protocol(protocol), - 'DT_CloneUrl': if can_clone_protocol(protocol) + 'DT_CanClone': can_clone_protocol?(protocol), + 'DT_CloneUrl': if can_clone_protocol?(protocol) clone_protocol_path(protocol, team: @team, type: @type) diff --git a/app/helpers/permission_helper.rb b/app/helpers/permission_helper.rb index 311be4e4d..689ac7b57 100644 --- a/app/helpers/permission_helper.rb +++ b/app/helpers/permission_helper.rb @@ -725,13 +725,13 @@ module PermissionHelper # current_user == protocol.added_by and (not protocol.in_repository_archived?) # end - def can_clone_protocol(protocol) - is_normal_user_or_admin_of_team(protocol.team) and - ( - protocol.in_repository_public? or - (protocol.in_repository_private? and current_user == protocol.added_by) - ) - end + # def can_clone_protocol(protocol) + # is_normal_user_or_admin_of_team(protocol.team) and + # ( + # protocol.in_repository_public? or + # (protocol.in_repository_private? and current_user == protocol.added_by) + # ) + # end # def can_make_protocol_private(protocol) # protocol.added_by == current_user and diff --git a/app/permissions/team.rb b/app/permissions/team.rb index 0c46783b2..1bedbe69a 100644 --- a/app/permissions/team.rb +++ b/app/permissions/team.rb @@ -53,4 +53,10 @@ Canaid::Permissions.register_for(Protocol) do user.is_normal_user_or_admin_of_team?(protocol.team) && user == protocol.added_by end + + # clone protocol in repository + can :clone_protocol do |user, protocol| + can_create_protocol?(user, protocol.team) && + can_read_protocol_in_repository?(user, protocol) + end end