refactor clone protocol permission

This commit is contained in:
mlorb 2017-12-07 11:11:27 +01:00
parent f6d36ae6a2
commit 0d37f9c85a
4 changed files with 17 additions and 11 deletions

View file

@ -926,7 +926,7 @@ class ProtocolsController < ApplicationController
@original = Protocol.find_by_id(params[:id]) @original = Protocol.find_by_id(params[:id])
if @original.blank? || if @original.blank? ||
!can_clone_protocol(@original) || @type == :archive !can_clone_protocol?(@original) || @type == :archive
render_403 render_403
end end
end end

View file

@ -5,7 +5,7 @@ class ProtocolsDatatable < CustomDatatable
def_delegator :@view, :can_update_protocol_in_repository? def_delegator :@view, :can_update_protocol_in_repository?
def_delegator :@view, :edit_protocol_path 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, :clone_protocol_path
def_delegator :@view, :can_update_protocol_type_in_repository? def_delegator :@view, :can_update_protocol_type_in_repository?
def_delegator :@view, :can_read_protocol_in_repository? def_delegator :@view, :can_read_protocol_in_repository?
@ -88,8 +88,8 @@ class ProtocolsDatatable < CustomDatatable
team: @team, team: @team,
type: @type) type: @type)
end, end,
'DT_CanClone': can_clone_protocol(protocol), 'DT_CanClone': can_clone_protocol?(protocol),
'DT_CloneUrl': if can_clone_protocol(protocol) 'DT_CloneUrl': if can_clone_protocol?(protocol)
clone_protocol_path(protocol, clone_protocol_path(protocol,
team: @team, team: @team,
type: @type) type: @type)

View file

@ -725,13 +725,13 @@ module PermissionHelper
# current_user == protocol.added_by and (not protocol.in_repository_archived?) # current_user == protocol.added_by and (not protocol.in_repository_archived?)
# end # end
def can_clone_protocol(protocol) # def can_clone_protocol(protocol)
is_normal_user_or_admin_of_team(protocol.team) and # is_normal_user_or_admin_of_team(protocol.team) and
( # (
protocol.in_repository_public? or # protocol.in_repository_public? or
(protocol.in_repository_private? and current_user == protocol.added_by) # (protocol.in_repository_private? and current_user == protocol.added_by)
) # )
end # end
# def can_make_protocol_private(protocol) # def can_make_protocol_private(protocol)
# protocol.added_by == current_user and # protocol.added_by == current_user and

View file

@ -53,4 +53,10 @@ Canaid::Permissions.register_for(Protocol) do
user.is_normal_user_or_admin_of_team?(protocol.team) && user.is_normal_user_or_admin_of_team?(protocol.team) &&
user == protocol.added_by user == protocol.added_by
end 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 end