X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9e24edb1d9624b6aed38464c70cab5027586abbc..1e1712c0cb2f3eb9da5759ef9b356ad52f5749b7:/apps/workbench/app/controllers/projects_controller.rb diff --git a/apps/workbench/app/controllers/projects_controller.rb b/apps/workbench/app/controllers/projects_controller.rb index 01ab89b910..31cb5eff3e 100644 --- a/apps/workbench/app/controllers/projects_controller.rb +++ b/apps/workbench/app/controllers/projects_controller.rb @@ -8,7 +8,11 @@ class ProjectsController < ApplicationController end def show_pane_list - %w(Data_collections Jobs_and_pipelines Pipeline_templates Subprojects Other_objects Permissions Advanced) + if @user_is_manager + %w(Contents Sharing Advanced) + else + %w(Contents Advanced) + end end def remove_item @@ -80,9 +84,21 @@ class ProjectsController < ApplicationController @objects = @object.contents(limit: 50, include_linked: true, offset: params[:offset] || 0) - @share_links = Link.filter([['head_uuid', '=', @object.uuid], - ['link_class', '=', 'permission']]) @logs = Log.limit(10).filter([['object_uuid', '=', @object.uuid]]) + @users = User.limit(10000). + select(["uuid", "is_active", "first_name", "last_name"]). + filter([['is_active', '=', 'true']]) + @groups = Group.limit(10000). + select(["uuid", "name", "description"]) + + begin + @share_links = Link.permissions_for(@object) + @user_is_manager = true + rescue ArvadosApiClient::AccessForbiddenException, + ArvadosApiClient::NotFoundException + @share_links = [] + @user_is_manager = false + end @objects_and_names = [] @objects.each do |object| @@ -131,4 +147,26 @@ class ProjectsController < ApplicationController @updates = params['project'] super end + + def share_with + if not params[:uuids].andand.any? + @errors = ["No user/group UUIDs specified to share with."] + return render_error(status: 422) + end + results = {"success" => [], "failure" => {}} + params[:uuids].each do |shared_uuid| + begin + Link.create(tail_uuid: shared_uuid, link_class: "permission", + name: "can_read", head_uuid: @object.uuid) + rescue ArvadosApiClient::ApiError => error + results["failure"][shared_uuid] = error.api_response.andand[:errors] + else + results["success"] << shared_uuid + end + end + status = (results["failure"].empty?) ? 200 : 422 + respond_to do |f| + f.json { render(json: results, status: status) } + end + end end