X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/4e1f73e620d876cdc1e87912d58f1c7a1028996b..bf15373590e21dafd696fa0c10906eb653610d1d:/services/api/app/controllers/arvados/v1/repositories_controller.rb diff --git a/services/api/app/controllers/arvados/v1/repositories_controller.rb b/services/api/app/controllers/arvados/v1/repositories_controller.rb index 7592f9d654..390aa73324 100644 --- a/services/api/app/controllers/arvados/v1/repositories_controller.rb +++ b/services/api/app/controllers/arvados/v1/repositories_controller.rb @@ -1,4 +1,6 @@ class Arvados::V1::RepositoriesController < ApplicationController + skip_before_filter :find_object_by_uuid, :only => :get_all_permissions + skip_before_filter :render_404_if_no_object, :only => :get_all_permissions before_filter :admin_required, :only => :get_all_permissions def get_all_permissions @users = {} @@ -10,9 +12,26 @@ class Arvados::V1::RepositoriesController < ApplicationController @repos = Repository.includes(:permissions).all @repos.each do |repo| gitolite_permissions = '' + perms = [] repo.permissions.each do |perm| - user_uuid = perm.tail_uuid - @user_aks[user_uuid] = @users[user_uuid].andand.authorized_keys.collect do |ak| + if ArvadosModel::resource_class_for_uuid(perm.tail_uuid) == Group + @users.each do |user_uuid, user| + user.group_permissions.each do |group_uuid, perm_mask| + if perm_mask[:write] + perms << {name: 'can_write', user_uuid: user_uuid} + elsif perm_mask[:read] + perms << {name: 'can_read', user_uuid: user_uuid} + end + end + end + else + perms << {name: perm.name, user_uuid: perm.tail_uuid} + end + end + perms.each do |perm| + user_uuid = perm[:user_uuid] + @user_aks[user_uuid] = @users[user_uuid].andand.authorized_keys.andand. + collect do |ak| { public_key: ak.public_key, authorized_key_uuid: ak.uuid @@ -26,8 +45,8 @@ class Arvados::V1::RepositoriesController < ApplicationController fetch_url: repo.fetch_url, user_permissions: {} } - @repo_info[repo.uuid][:user_permissions][user_uuid] ||= {} - @repo_info[repo.uuid][:user_permissions][user_uuid][perm.name] = true + ri = (@repo_info[repo.uuid][:user_permissions][user_uuid] ||= {}) + ri[perm[:name]] = true end end end