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"
/>
+