diff --git a/app/controllers/access_permissions/repositories_controller.rb b/app/controllers/access_permissions/repositories_controller.rb new file mode 100644 index 000000000..8f2fe8678 --- /dev/null +++ b/app/controllers/access_permissions/repositories_controller.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module AccessPermissions + class RepositoriesController < BaseController + private + + def set_model + @model = current_team.repositories.includes(user_assignments: %i(user user_role)).find_by(id: params[:id]) + + render_404 unless @model + end + + def check_manage_permissions + render_403 unless can_manage_repository_users?(@model) + end + + def check_read_permissions + render_403 unless can_read_repository?(@model) || can_manage_team?(@model.team) + end + end +end diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 4baf20faa..8b644060f 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -8,17 +8,18 @@ class RepositoriesController < ApplicationController include TeamsHelper include RepositoriesDatatableHelper include MyModulesHelper + include UserRolesHelper before_action :switch_team_with_param, only: %i(index) before_action :load_repository, except: %i(index create create_modal sidebar archive restore actions_toolbar - export_repositories list) + export_repositories list user_roles) before_action :load_repositories, only: %i(index list) before_action :load_repositories_for_archiving, only: :archive before_action :load_repositories_for_restoring, only: :restore before_action :check_view_all_permissions, only: %i(index sidebar list) before_action :check_view_permissions, except: %i(index create_modal create update destroy parse_sheet import_records sidebar archive restore actions_toolbar - export_repositories list) + export_repositories list user_roles) before_action :check_manage_permissions, only: %i(rename_modal update) before_action :check_delete_permissions, only: %i(destroy destroy_modal) before_action :check_archive_permissions, only: %i(archive restore) @@ -482,6 +483,10 @@ class RepositoriesController < ApplicationController } end + def user_roles + render json: { data: user_roles_collection(Repository.new).map(&:reverse) } + end + private def load_repository diff --git a/app/javascript/vue/repositories/table.vue b/app/javascript/vue/repositories/table.vue index a7c11ce8e..682b8895f 100644 --- a/app/javascript/vue/repositories/table.vue +++ b/app/javascript/vue/repositories/table.vue @@ -18,6 +18,7 @@ @share="share" @create="newRepository = true" @tableReloaded="reloadingTable = false" + @access="access" /> +