Class: Hydra::AdminPolicy

Inherits:
ActiveFedora::Base
  • Object
show all
Includes:
ModelMixins::RightsMetadata
Defined in:
lib/hydra/admin_policy.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ModelMixins::RightsMetadata

#discover_groups, #discover_groups=, #discover_groups_string, #discover_groups_string=, #discover_users, #discover_users=, #discover_users_string, #discover_users_string=, #edit_groups, #edit_groups=, #edit_groups_string, #edit_groups_string=, #edit_users, #edit_users=, #permissions, #permissions=, #read_groups, #read_groups=, #read_groups_string, #read_groups_string=, #read_users, #read_users=, #read_users_string, #read_users_string=, #set_discover_groups, #set_discover_users, #set_edit_groups, #set_edit_users, #set_read_groups, #set_read_users

Class Method Details

.editable_by_user(user) ⇒ Object



29
30
31
# File 'lib/hydra/admin_policy.rb', line 29

def self.editable_by_user(user)
  where_user_has_permissions(user, [:edit])
end

.readable_by_user(user) ⇒ Object



25
26
27
# File 'lib/hydra/admin_policy.rb', line 25

def self.readable_by_user(user)
  where_user_has_permissions(user, [:read, :edit])
end

.where_user_has_permissions(user, permissions = [:edit]) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/hydra/admin_policy.rb', line 33

def self.where_user_has_permissions(user, permissions=[:edit])
  or_query = [] 
  RoleMapper.roles(user).each do |group|
    permissions.each do |permission|
      or_query << ActiveFedora::SolrService.solr_name("#{permission}_access_group", indexer)+":#{group}"
    end
  end
  permissions.each do |permission|
    or_query << ActiveFedora::SolrService.solr_name("#{permission}_access_person", indexer)+":#{user.user_key}"
  end
  find_with_conditions(or_query.join(" OR "))
end

Instance Method Details

#default_permissionsObject

Returns a list with all the permissions on the object.

Examples:

[{:name=>"group1", :access=>"discover", :type=>'group'},
{:name=>"group2", :access=>"discover", :type=>'group'},
{:name=>"user2", :access=>"read", :type=>'user'},
{:name=>"user1", :access=>"edit", :type=>'user'},
{:name=>"user3", :access=>"read", :type=>'user'}]


73
74
75
76
77
# File 'lib/hydra/admin_policy.rb', line 73

def default_permissions
  (defaultRights.groups.map {|x| {:type=>'group', :access=>x[1], :name=>x[0] }} + 
    defaultRights.individuals.map {|x| {:type=>'user', :access=>x[1], :name=>x[0]}})

end

#default_permissions=(params) ⇒ Object

Updates those permissions that are provided to it. Does not replace any permissions unless they are provided

Examples:

obj.default_permissions= [{:name=>"group1", :access=>"discover", :type=>'group'},
{:name=>"group2", :access=>"discover", :type=>'group'}]


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/hydra/admin_policy.rb', line 50

def default_permissions=(params)
  perm_hash = {'person' => defaultRights.individuals, 'group'=> defaultRights.groups}

  params.each do |row|
    if row[:type] == 'user' || row[:type] == 'person'
      perm_hash['person'][row[:name]] = row[:access]        
    elsif row[:type] == 'group'
      perm_hash['group'][row[:name]] = row[:access]
    else
      raise ArgumentError, "Permission type must be 'user', 'person' (alias for 'user'), or 'group'"
    end
  end
  
  defaultRights.update_permissions(perm_hash)
end