X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/95252621f7065265dfd5d660446f5165eea93ee5..4151af1d89da4c3f3fff3fb6732c0249d93dcda9:/services/api/app/models/user.rb diff --git a/services/api/app/models/user.rb b/services/api/app/models/user.rb index e628edaa3f..a85a63df7d 100644 --- a/services/api/app/models/user.rb +++ b/services/api/app/models/user.rb @@ -19,6 +19,7 @@ class User < ArvadosModel t.add :identity_url t.add :is_active t.add :is_admin + t.add :is_invited t.add :prefs end @@ -28,11 +29,18 @@ class User < ArvadosModel "#{first_name} #{last_name}" end + def is_invited + !!(self.is_active || + Rails.configuration.new_users_are_active || + self.groups_i_can(:read).select { |x| x.match /-f+$/ }.first) + end + def groups_i_can(verb) self.group_permissions.select { |uuid, mask| mask[verb] }.keys end def can?(actions) + return true if is_admin actions.each do |action, target| target_uuid = target if target.respond_to? :uuid @@ -67,15 +75,22 @@ class User < ArvadosModel lookup_uuids = todo.keys lookup_uuids.each do |uuid| done[uuid] = true end todo = {} + newgroups = [] + Group.where('owner_uuid in (?)', lookup_uuids).each do |group| + newgroups << [group.owner_uuid, group.uuid, 'can_manage'] + end Link.where('tail_uuid in (?) and link_class = ? and head_kind = ?', lookup_uuids, 'permission', 'arvados#group').each do |link| - unless done.has_key? link.head_uuid - todo[link.head_uuid] = true + newgroups << [link.tail_uuid, link.head_uuid, link.name] + end + newgroups.each do |tail_uuid, head_uuid, perm_name| + unless done.has_key? head_uuid + todo[head_uuid] = true end link_permissions = {} - case link.name + case perm_name when 'can_read' link_permissions = {read:true} when 'can_write' @@ -83,10 +98,10 @@ class User < ArvadosModel when 'can_manage' link_permissions = ALL_PERMISSIONS end - permissions_from[link.tail_uuid] ||= {} - permissions_from[link.tail_uuid][link.head_uuid] ||= {} + permissions_from[tail_uuid] ||= {} + permissions_from[tail_uuid][head_uuid] ||= {} link_permissions.each do |k,v| - permissions_from[link.tail_uuid][link.head_uuid][k] ||= v + permissions_from[tail_uuid][head_uuid][k] ||= v end end end