hydra-access-controls 8.2.0 → 9.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.textile +10 -10
  3. data/app/models/concerns/hydra/access_controls/access_right.rb +3 -2
  4. data/app/models/concerns/hydra/access_controls/embargoable.rb +120 -132
  5. data/app/models/concerns/hydra/access_controls/permissions.rb +137 -103
  6. data/app/models/concerns/hydra/access_controls/visibility.rb +3 -5
  7. data/app/models/concerns/hydra/access_controls.rb +0 -1
  8. data/app/models/concerns/hydra/admin_policy_behavior.rb +27 -2
  9. data/app/models/concerns/hydra/rights.rb +15 -0
  10. data/app/models/hydra/access_controls/access_control_list.rb +17 -0
  11. data/app/models/hydra/access_controls/embargo.rb +65 -0
  12. data/app/models/hydra/access_controls/lease.rb +66 -0
  13. data/app/models/hydra/access_controls/permission.rb +85 -0
  14. data/app/vocabularies/acl.rb +12 -0
  15. data/app/vocabularies/hydra/acl.rb +20 -0
  16. data/config/fedora.yml +4 -2
  17. data/hydra-access-controls.gemspec +6 -7
  18. data/lib/hydra/ability.rb +45 -43
  19. data/lib/hydra/access_controls_enforcement.rb +23 -25
  20. data/lib/hydra/admin_policy.rb +34 -11
  21. data/lib/hydra/config.rb +4 -15
  22. data/lib/hydra/permissions_query.rb +2 -2
  23. data/lib/hydra/permissions_solr_document.rb +4 -6
  24. data/lib/hydra/policy_aware_ability.rb +56 -53
  25. data/lib/hydra/policy_aware_access_controls_enforcement.rb +28 -18
  26. data/lib/hydra-access-controls.rb +1 -1
  27. data/spec/factories.rb +15 -15
  28. data/spec/services/embargo_service_spec.rb +6 -6
  29. data/spec/services/lease_service_spec.rb +6 -6
  30. data/spec/spec_helper.rb +20 -13
  31. data/spec/support/mods_asset.rb +3 -3
  32. data/spec/unit/ability_spec.rb +96 -121
  33. data/spec/unit/access_controls_enforcement_spec.rb +29 -27
  34. data/spec/unit/access_right_spec.rb +6 -1
  35. data/spec/unit/accessible_by_spec.rb +14 -5
  36. data/spec/unit/admin_policy_spec.rb +99 -92
  37. data/spec/unit/config_spec.rb +14 -15
  38. data/spec/unit/embargoable_spec.rb +26 -28
  39. data/spec/unit/permission_spec.rb +36 -16
  40. data/spec/unit/permissions_spec.rb +121 -65
  41. data/spec/unit/policy_aware_ability_spec.rb +64 -78
  42. data/spec/unit/policy_aware_access_controls_enforcement_spec.rb +81 -77
  43. data/spec/unit/role_mapper_spec.rb +10 -10
  44. data/spec/unit/with_access_right_spec.rb +1 -1
  45. metadata +29 -51
  46. data/lib/hydra/access_controls/permission.rb +0 -40
  47. data/lib/hydra/datastream/inheritable_rights_metadata.rb +0 -22
  48. data/lib/hydra/datastream/rights_metadata.rb +0 -276
  49. data/lib/hydra/datastream.rb +0 -7
  50. data/spec/unit/hydra_rights_metadata_persistence_spec.rb +0 -71
  51. data/spec/unit/hydra_rights_metadata_spec.rb +0 -301
  52. data/spec/unit/inheritable_rights_metadata_spec.rb +0 -65
@@ -0,0 +1,66 @@
1
+ module Hydra::AccessControls
2
+ class Lease < ActiveFedora::Base
3
+ property :visibility_during_lease, predicate: Hydra::ACL.visibilityDuringLease
4
+ property :visibility_after_lease, predicate: Hydra::ACL.visibilityAfterLease
5
+ property :lease_expiration_date, predicate: Hydra::ACL.leaseExpirationDate
6
+ property :lease_history, predicate: Hydra::ACL.leaseHistory
7
+
8
+ # Hack until ActiveFedora supports activeTriples 0.3.0 (then we can just use super)
9
+ def visibility_during_lease_with_first
10
+ visibility_during_lease_without_first.first
11
+ end
12
+ alias_method_chain :visibility_during_lease, :first
13
+
14
+ # Hack until ActiveFedora supports activeTriples 0.3.0 (then we can just use super)
15
+ def visibility_after_lease_with_first
16
+ visibility_after_lease_without_first.first
17
+ end
18
+ alias_method_chain :visibility_after_lease, :first
19
+
20
+ # Hack until ActiveFedora supports activeTriples 0.3.0 (then we can just use super)
21
+ def lease_expiration_date_with_first
22
+ lease_expiration_date_without_first.first
23
+ end
24
+ alias_method_chain :lease_expiration_date, :first
25
+
26
+ # Hack until ActiveFedora supports activeTriples 0.3.0 (then we can just use super)
27
+ def lease_expiration_date_with_casting=(date)
28
+ date = DateTime.parse(date) if date && date.kind_of?(String)
29
+ self.lease_expiration_date_without_casting = date
30
+ end
31
+ alias_method_chain :lease_expiration_date=, :casting
32
+
33
+ def active?
34
+ lease_expiration_date.present? && Date.today < lease_expiration_date
35
+ end
36
+
37
+ def deactivate!
38
+ return unless lease_expiration_date
39
+ lease_state = active? ? "active" : "expired"
40
+ lease_record = lease_history_message(lease_state, Date.today, lease_expiration_date, visibility_during_lease, visibility_after_lease)
41
+ self.lease_expiration_date = nil
42
+ self.visibility_during_lease = nil
43
+ self.visibility_after_lease = nil
44
+ self.lease_history += [lease_record]
45
+ end
46
+
47
+ def to_hash
48
+ {}.tap do |doc|
49
+ date_field_name = Hydra.config.permissions.lease.expiration_date.sub(/_dtsi/, '')
50
+ Solrizer.insert_field(doc, date_field_name, lease_expiration_date, :stored_sortable)
51
+
52
+ doc[::Solrizer.solr_name("visibility_during_lease", :symbol)] = visibility_during_lease unless visibility_during_lease.nil?
53
+ doc[::Solrizer.solr_name("visibility_after_lease", :symbol)] = visibility_after_lease unless visibility_after_lease.nil?
54
+ doc[::Solrizer.solr_name("lease_history", :symbol)] = lease_history unless lease_history.nil?
55
+ end
56
+ end
57
+
58
+ protected
59
+ # Create the log message used when deactivating a lease
60
+ # This method may be overriden in order to transform the values of the passed parameters.
61
+ def lease_history_message(state, deactivate_date, expiration_date, visibility_during, visibility_after)
62
+ I18n.t 'hydra.lease.history_message', state: state, deactivate_date: deactivate_date, expiration_date: expiration_date,
63
+ visibility_during: visibility_during, visibility_after: visibility_after
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,85 @@
1
+ module Hydra::AccessControls
2
+ AGENT_URL_PREFIX = "http://projecthydra.org/ns/auth/".freeze
3
+ GROUP_AGENT_URL_PREFIX = "http://projecthydra.org/ns/auth/group".freeze
4
+ PERSON_AGENT_URL_PREFIX = 'http://projecthydra.org/ns/auth/person'.freeze
5
+ class Permission < AccessControlList
6
+ def initialize(args)
7
+ super()
8
+ build_agent(args[:name], args[:type].to_s)
9
+ build_access(args[:access])
10
+ end
11
+
12
+ def to_hash
13
+ { name: agent_name, type: type, access: access }
14
+ end
15
+
16
+ def inspect
17
+ agent_value = agent.first.rdf_subject.to_s.inspect if agent.first
18
+ mode_value = mode.first.rdf_subject.to_s.inspect if mode.first
19
+ "<#{self.class.name} id: #{id} agent: #{agent_value} mode: #{mode_value} access_to: #{access_to_id.inspect}>"
20
+ end
21
+
22
+ def == other
23
+ other.is_a?(Permission) && id == other.id && self.access_to_id == other.access_to_id &&
24
+ self.agent.first.rdf_subject == other.agent.first.rdf_subject && self.mode.first.rdf_subject == other.mode.first.rdf_subject
25
+ end
26
+
27
+ def attributes=(attributes)
28
+ attrs = attributes.dup
29
+ name = attrs.delete(:name)
30
+ type = attrs.delete(:type)
31
+ build_agent(name, type) if name && type
32
+ access = attrs.delete(:access)
33
+ build_access(access) if access
34
+ super(attrs)
35
+ end
36
+
37
+ def agent_name
38
+ parsed_agent.last
39
+ end
40
+
41
+ def access
42
+ @access ||= mode.first.rdf_subject.to_s.split('#').last.downcase.sub('write', 'edit')
43
+ end
44
+
45
+ def type
46
+ parsed_agent.first
47
+ end
48
+
49
+ protected
50
+
51
+ def parsed_agent
52
+ @parsed_agent ||= agent.first.rdf_subject.to_s.sub(AGENT_URL_PREFIX, '').split('#')
53
+ end
54
+
55
+ def build_agent(name, type)
56
+ raise "Can't build agent #{inspect}" unless name && type
57
+ self.agent = case type
58
+ when "group"
59
+ Agent.new(::RDF::URI.new("#{GROUP_AGENT_URL_PREFIX}##{name}"))
60
+ when "person"
61
+ Agent.new(::RDF::URI.new("#{PERSON_AGENT_URL_PREFIX}##{name}"))
62
+ when "user"
63
+ Deprecation.warn Permission, "Passing \"user\" as the type to Permission is deprecated. Use \"person\" instead. This will be an error in ActiveFedora 9."
64
+ Agent.new(::RDF::URI.new("#{PERSON_AGENT_URL_PREFIX}##{name}"))
65
+ else
66
+ raise ArgumentError, "Unknown agent type #{type.inspect}"
67
+ end
68
+ end
69
+
70
+ def build_access(access)
71
+ raise "Can't build access #{inspect}" unless access
72
+ self.mode = case access
73
+ when "read"
74
+ Mode.new(::ACL.Read)
75
+ when "edit"
76
+ Mode.new(::ACL.Write)
77
+ when "discover"
78
+ Mode.new(Hydra::ACL.Discover)
79
+ else
80
+ raise ArgumentError, "Unknown access #{access.inspect}"
81
+ end
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,12 @@
1
+ class ACL < RDF::StrictVocabulary('http://www.w3.org/ns/auth/acl#')
2
+ property :accessTo
3
+ property :mode
4
+ property :agent
5
+ property :agentClass
6
+
7
+ property :Agent
8
+ property :Read
9
+ property :Write
10
+ property :Append
11
+ property :Control
12
+ end
@@ -0,0 +1,20 @@
1
+ module Hydra
2
+ class ACL < RDF::StrictVocabulary('http://projecthydra.org/ns/auth/acl#')
3
+ property :Discover # extends http://www.w3.org/ns/auth/acl#Access
4
+
5
+ property :hasEmbargo
6
+ property :hasLease
7
+
8
+ property :visibilityDuringEmbargo
9
+ property :visibilityAfterEmbargo
10
+ property :embargoReleaseDate
11
+ property :visibilityDuringLease
12
+ property :visibilityAfterLease
13
+ property :leaseExpirationDate
14
+
15
+ property :embargoHistory
16
+ property :leaseHistory
17
+
18
+ property :defaultPermissions
19
+ end
20
+ end
data/config/fedora.yml CHANGED
@@ -1,8 +1,10 @@
1
1
  development:
2
2
  user: fedoraAdmin
3
3
  password: fedoraAdmin
4
- url: http://127.0.0.1:<%= ENV['TEST_JETTY_PORT'] || 8983 %>/fedora
4
+ url: http://localhost:8983/fedora/rest
5
+ base_path: /dev
5
6
  test:
6
7
  user: fedoraAdmin
7
8
  password: fedoraAdmin
8
- url: http://127.0.0.1:<%= ENV['TEST_JETTY_PORT'] || 8983 %>/fedora-test
9
+ url: http://localhost:8983/fedora/rest
10
+ base_path: /test
@@ -16,14 +16,13 @@ Gem::Specification.new do |gem|
16
16
  gem.version = version
17
17
  gem.license = "APACHE2"
18
18
 
19
- gem.required_ruby_version = '>= 2.0.0'
19
+ gem.required_ruby_version = '>= 1.9.3'
20
20
 
21
- gem.add_dependency 'activesupport', '~> 4.0'
22
- gem.add_dependency "active-fedora", '~> 8.0'
23
- gem.add_dependency "om", '~> 3.0', '>= 3.0.7'
24
- gem.add_dependency 'cancancan', '~> 1.8'
25
- gem.add_dependency 'deprecation', '~> 0.1'
26
- gem.add_dependency "blacklight", '~> 5.10'
21
+ gem.add_dependency 'activesupport'
22
+ gem.add_dependency "active-fedora", '~> 9.0.0.beta3'
23
+ gem.add_dependency 'cancancan'
24
+ gem.add_dependency 'deprecation'
25
+ gem.add_dependency "blacklight", '~> 5.3'
27
26
 
28
27
  # sass-rails is typically generated into the app's gemfile by `rails new`
29
28
  # In rails 3 it's put into the "assets" group and thus not available to the
data/lib/hydra/ability.rb CHANGED
@@ -3,15 +3,15 @@ require 'cancan'
3
3
  module Hydra
4
4
  module Ability
5
5
  extend ActiveSupport::Concern
6
-
6
+
7
7
  # once you include Hydra::Ability you can add custom permission methods by appending to ability_logic like so:
8
8
  #
9
9
  # self.ability_logic +=[:setup_my_permissions]
10
-
10
+
11
11
  included do
12
12
  include CanCan::Ability
13
13
  include Hydra::PermissionsQuery
14
- include Blacklight::SearchHelper
14
+ include Blacklight::SolrHelper
15
15
  class_attribute :ability_logic
16
16
  self.ability_logic = [:create_permissions, :edit_permissions, :read_permissions, :download_permissions, :custom_permissions]
17
17
  end
@@ -33,7 +33,7 @@ module Hydra
33
33
  ## You can override this method if you are using a different AuthZ (such as LDAP)
34
34
  def user_groups
35
35
  return @user_groups if @user_groups
36
-
36
+
37
37
  @user_groups = default_user_groups
38
38
  @user_groups |= current_user.groups if current_user and current_user.respond_to? :groups
39
39
  @user_groups |= ['registered'] unless current_user.new_record?
@@ -44,7 +44,7 @@ module Hydra
44
44
  # # everyone is automatically a member of the group 'public'
45
45
  ['public']
46
46
  end
47
-
47
+
48
48
 
49
49
  def hydra_default_permissions
50
50
  Rails.logger.debug("Usergroups are " + user_groups.inspect)
@@ -58,65 +58,67 @@ module Hydra
58
58
  end
59
59
 
60
60
  def edit_permissions
61
- can [:edit, :update, :destroy], String do |pid|
62
- test_edit(pid)
63
- end
61
+ can [:edit, :update, :destroy], String do |id|
62
+ test_edit(id)
63
+ end
64
64
 
65
65
  can [:edit, :update, :destroy], ActiveFedora::Base do |obj|
66
- test_edit(obj.pid)
66
+ test_edit(obj.id)
67
67
  end
68
-
68
+
69
69
  can [:edit, :update, :destroy], SolrDocument do |obj|
70
70
  cache.put(obj.id, obj)
71
71
  test_edit(obj.id)
72
- end
72
+ end
73
73
  end
74
74
 
75
75
  def read_permissions
76
- can :read, String do |pid|
77
- test_read(pid)
76
+ can :read, String do |id|
77
+ test_read(id)
78
78
  end
79
79
 
80
80
  can :read, ActiveFedora::Base do |obj|
81
- test_read(obj.pid)
82
- end
83
-
81
+ test_read(obj.id)
82
+ end
83
+
84
84
  can :read, SolrDocument do |obj|
85
85
  cache.put(obj.id, obj)
86
86
  test_read(obj.id)
87
- end
87
+ end
88
88
  end
89
89
 
90
90
  # Download permissions are exercised in Hydra::Controller::DownloadBehavior
91
91
  def download_permissions
92
- can :download, ActiveFedora::Datastream do |ds|
93
- can? :read, ds.pid # i.e, can download ds if can read object
92
+ can :download, ActiveFedora::File do |file|
93
+ parent_uri = file.uri.sub(/\/[^\/]*$/, '')
94
+ parent_id = ActiveFedora::Base.uri_to_id(parent_uri)
95
+ can? :read, parent_id # i.e, can download if can read parent resource
94
96
  end
95
97
  end
96
98
 
97
99
  ## Override custom permissions in your own app to add more permissions beyond what is defined by default.
98
100
  def custom_permissions
99
101
  end
100
-
102
+
101
103
  protected
102
104
 
103
- def test_edit(pid)
105
+ def test_edit(id)
104
106
  Rails.logger.debug("[CANCAN] Checking edit permissions for user: #{current_user.user_key} with groups: #{user_groups.inspect}")
105
- group_intersection = user_groups & edit_groups(pid)
106
- result = !group_intersection.empty? || edit_users(pid).include?(current_user.user_key)
107
+ group_intersection = user_groups & edit_groups(id)
108
+ result = !group_intersection.empty? || edit_users(id).include?(current_user.user_key)
107
109
  Rails.logger.debug("[CANCAN] decision: #{result}")
108
110
  result
109
- end
110
-
111
- def test_read(pid)
111
+ end
112
+
113
+ def test_read(id)
112
114
  Rails.logger.debug("[CANCAN] Checking read permissions for user: #{current_user.user_key} with groups: #{user_groups.inspect}")
113
- group_intersection = user_groups & read_groups(pid)
114
- result = !group_intersection.empty? || read_users(pid).include?(current_user.user_key)
115
+ group_intersection = user_groups & read_groups(id)
116
+ result = !group_intersection.empty? || read_users(id).include?(current_user.user_key)
115
117
  result
116
- end
117
-
118
- def edit_groups(pid)
119
- doc = permissions_doc(pid)
118
+ end
119
+
120
+ def edit_groups(id)
121
+ doc = permissions_doc(id)
120
122
  return [] if doc.nil?
121
123
  eg = doc[self.class.edit_group_field] || []
122
124
  Rails.logger.debug("[CANCAN] edit_groups: #{eg.inspect}")
@@ -124,16 +126,16 @@ module Hydra
124
126
  end
125
127
 
126
128
  # edit implies read, so read_groups is the union of edit and read groups
127
- def read_groups(pid)
128
- doc = permissions_doc(pid)
129
+ def read_groups(id)
130
+ doc = permissions_doc(id)
129
131
  return [] if doc.nil?
130
- rg = edit_groups(pid) | (doc[self.class.read_group_field] || [])
132
+ rg = edit_groups(id) | (doc[self.class.read_group_field] || [])
131
133
  Rails.logger.debug("[CANCAN] read_groups: #{rg.inspect}")
132
134
  return rg
133
135
  end
134
136
 
135
- def edit_users(pid)
136
- doc = permissions_doc(pid)
137
+ def edit_users(id)
138
+ doc = permissions_doc(id)
137
139
  return [] if doc.nil?
138
140
  ep = doc[self.class.edit_user_field] || []
139
141
  Rails.logger.debug("[CANCAN] edit_users: #{ep.inspect}")
@@ -141,24 +143,24 @@ module Hydra
141
143
  end
142
144
 
143
145
  # edit implies read, so read_users is the union of edit and read users
144
- def read_users(pid)
145
- doc = permissions_doc(pid)
146
+ def read_users(id)
147
+ doc = permissions_doc(id)
146
148
  return [] if doc.nil?
147
- rp = edit_users(pid) | (doc[self.class.read_user_field] || [])
149
+ rp = edit_users(id) | (doc[self.class.read_user_field] || [])
148
150
  Rails.logger.debug("[CANCAN] read_users: #{rp.inspect}")
149
151
  return rp
150
152
  end
151
153
 
152
154
  module ClassMethods
153
- def read_group_field
155
+ def read_group_field
154
156
  Hydra.config.permissions.read.group
155
157
  end
156
158
 
157
- def edit_user_field
159
+ def edit_user_field
158
160
  Hydra.config.permissions.edit.individual
159
161
  end
160
162
 
161
- def read_user_field
163
+ def read_user_field
162
164
  Hydra.config.permissions.read.individual
163
165
  end
164
166
 
@@ -1,8 +1,7 @@
1
1
  module Hydra::AccessControlsEnforcement
2
2
  extend ActiveSupport::Concern
3
3
 
4
- included do |klass|
5
- attr_writer :current_ability
4
+ included do
6
5
  class_attribute :solr_access_filters_logic
7
6
 
8
7
  # Set defaults. Each symbol identifies a _method_ that must be in
@@ -15,15 +14,11 @@ module Hydra::AccessControlsEnforcement
15
14
 
16
15
  end
17
16
 
18
- def current_ability
19
- @current_ability || raise("current_ability has not been set on #{self}")
20
- end
21
-
22
17
  protected
23
18
 
24
19
  def gated_discovery_filters(permission_types = discovery_permissions, ability = current_ability)
25
20
  user_access_filters = []
26
-
21
+
27
22
  # Grant access based on user id & group
28
23
  solr_access_filters_logic.each do |method_name|
29
24
  user_access_filters += send(method_name, permission_types, ability)
@@ -33,8 +28,8 @@ module Hydra::AccessControlsEnforcement
33
28
 
34
29
  def under_embargo?
35
30
  load_permissions_from_solr
36
- embargo_key = ActiveFedora::SolrService.solr_name("embargo_release_date", Hydra::Datastream::RightsMetadata.date_indexer)
37
- if @permissions_solr_document[embargo_key]
31
+ embargo_key = Hydra.config.permissions.embargo.release_date
32
+ if @permissions_solr_document[embargo_key]
38
33
  embargo_date = Date.parse(@permissions_solr_document[embargo_key].split(/T/)[0])
39
34
  return embargo_date > Date.parse(Time.now.to_s)
40
35
  end
@@ -44,7 +39,7 @@ module Hydra::AccessControlsEnforcement
44
39
  #
45
40
  # Action-specific enforcement
46
41
  #
47
-
42
+
48
43
  # Controller "before" filter for enforcing access controls on show actions
49
44
  # @param [Hash] opts (optional, not currently used)
50
45
  def enforce_show_permissions(opts={})
@@ -52,28 +47,30 @@ module Hydra::AccessControlsEnforcement
52
47
  if permissions.under_embargo? && !can?(:edit, permissions)
53
48
  raise Hydra::AccessDenied.new("This item is under embargo. You do not have sufficient access privileges to read this document.", :edit, params[:id])
54
49
  end
55
- unless can? :read, permissions
50
+ unless can? :read, permissions
56
51
  raise Hydra::AccessDenied.new("You do not have sufficient access privileges to read this document, which has been marked private.", :read, params[:id])
57
52
  end
58
53
  end
59
-
54
+
60
55
  # Solr query modifications
61
56
  #
62
-
63
- # Set solr_parameters to enforce appropriate permissions
57
+
58
+ # Set solr_parameters to enforce appropriate permissions
64
59
  # * Applies a lucene query to the solr :q parameter for gated discovery
65
60
  # * Uses public_qt search handler if user does not have "read" permissions
66
61
  # @param solr_parameters the current solr parameters
62
+ # @param user_parameters the current user-subitted parameters
67
63
  #
68
- # @example This method should be added to your CatalogController's search_params_logic
69
- # class CatalogController < ApplicationController
70
- # CatalogController.search_params_logic += [:add_access_controls_to_solr_params]
64
+ # @example This method should be added to your Catalog Controller's solr_search_params_logic
65
+ # class CatalogController < ApplicationController
66
+ # include Hydra::Controller::ControllerBehavior
67
+ # CatalogController.solr_search_params_logic << :add_access_controls_to_solr_params
71
68
  # end
72
- def add_access_controls_to_solr_params(solr_parameters)
73
- apply_gated_discovery(solr_parameters)
69
+ def add_access_controls_to_solr_params(solr_parameters, user_parameters)
70
+ apply_gated_discovery(solr_parameters, user_parameters)
74
71
  end
75
72
 
76
-
73
+
77
74
  # Which permission levels (logical OR) will grant you the ability to discover documents in a search.
78
75
 
79
76
  # Override this method if you want it to be something other than the default
@@ -86,19 +83,20 @@ module Hydra::AccessControlsEnforcement
86
83
 
87
84
  # Contrller before filter that sets up access-controlled lucene query in order to provide gated discovery behavior
88
85
  # @param solr_parameters the current solr parameters
89
- def apply_gated_discovery(solr_parameters)
86
+ # @param user_parameters the current user-subitted parameters
87
+ def apply_gated_discovery(solr_parameters, user_parameters)
90
88
  solr_parameters[:fq] ||= []
91
89
  solr_parameters[:fq] << gated_discovery_filters.join(" OR ")
92
- Rails.logger.debug("Solr parameters: #{ solr_parameters.inspect }")
90
+ logger.debug("Solr parameters: #{ solr_parameters.inspect }")
93
91
  end
94
92
 
95
-
93
+
96
94
  def apply_group_permissions(permission_types, ability = current_ability)
97
95
  # for groups
98
96
  user_access_filters = []
99
97
  ability.user_groups.each_with_index do |group, i|
100
98
  permission_types.each do |type|
101
- user_access_filters << escape_filter(ActiveFedora::SolrService.solr_name("#{type}_access_group", Hydra::Datastream::RightsMetadata.indexer), group)
99
+ user_access_filters << escape_filter(Hydra.config.permissions[type.to_sym].group, group)
102
100
  end
103
101
  end
104
102
  user_access_filters
@@ -114,7 +112,7 @@ module Hydra::AccessControlsEnforcement
114
112
  user = ability.current_user
115
113
  if user && user.user_key.present?
116
114
  permission_types.each do |type|
117
- user_access_filters << escape_filter(ActiveFedora::SolrService.solr_name("#{type}_access_person", Hydra::Datastream::RightsMetadata.indexer), user.user_key)
115
+ user_access_filters << escape_filter(Hydra.config.permissions[type.to_sym].individual, user.user_key)
118
116
  end
119
117
  end
120
118
  user_access_filters
@@ -1,15 +1,38 @@
1
- class Hydra::AdminPolicy < ActiveFedora::Base
2
-
3
- include Hydra::AdminPolicyBehavior
4
- include Hydra::AccessControls::Permissions
1
+ module Hydra
2
+ class AdminPolicy < ActiveFedora::Base
5
3
 
6
- has_metadata 'descMetadata', type: ActiveFedora::QualifiedDublinCoreDatastream do |m|
7
- m.title :type=> :text, :index_as=>[:searchable]
8
- end
4
+ include Hydra::AdminPolicyBehavior
5
+ include Hydra::AccessControls::Permissions
6
+
7
+ property :title, predicate: ::RDF::DC.title do |index|
8
+ index.as :stored_searchable
9
+ end
10
+ property :description, predicate: ::RDF::DC.description do |index|
11
+ index.as :searchable
12
+ end
13
+
14
+ # Hack until ActiveFedora supports activeTriples 0.3.0 (then we can just use super)
15
+ def description_with_first
16
+ description_without_first.first
17
+ end
18
+ alias_method_chain :description, :first
9
19
 
10
- has_attributes :title, :description, datastream: 'descMetadata', multiple: false
11
- has_attributes :license_title, datastream: 'rightsMetadata', at: [:license, :title], multiple: false
12
- has_attributes :license_description, datastream: 'rightsMetadata', at: [:license, :description], multiple: false
13
- has_attributes :license_url, datastream: 'rightsMetadata', at: [:license, :url], multiple: false
20
+ # Hack until ActiveFedora supports activeTriples 0.3.0 (then we can just use super)
21
+ def title_with_first
22
+ title_without_first.first
23
+ end
24
+ alias_method_chain :title, :first
14
25
 
26
+ def license_title=(_)
27
+ Deprecation.warn AdminPolicy, "license_title= has been remove from AdminPolicy. Look at Hydra::Rights instead"
28
+ end
29
+
30
+ def license_description=(_)
31
+ Deprecation.warn AdminPolicy, "license_title= has been remove from AdminPolicy. Look at Hydra::Rights instead"
32
+ end
33
+
34
+ def license_url=(_)
35
+ Deprecation.warn AdminPolicy, "license_title= has been remove from AdminPolicy. Look at Hydra::Rights instead"
36
+ end
37
+ end
15
38
  end
data/lib/hydra/config.rb CHANGED
@@ -47,11 +47,6 @@ module Hydra
47
47
  @lease = LeaseConfig.new({}, prefix: prefix)
48
48
  end
49
49
 
50
- def embargo_release_date
51
- Deprecation.warn PermissionsConfig, "embargo_release_date is deprecated, use embargo.release_date instead"
52
- embargo.release_date
53
- end
54
-
55
50
  def merge! values
56
51
  values.each {|k, v| self[k] = v }
57
52
  end
@@ -62,9 +57,6 @@ module Hydra
62
57
  self.assign_value key, value
63
58
  when :inheritable
64
59
  inheritable.merge! value
65
- when :embargo_release_date
66
- Deprecation.warn PermissionsConfig, "[:embargo_release_date]= is deprecated, use embargo.release_date= instead"
67
- embargo.release_date = value
68
60
  when :policy_class
69
61
  self.policy_class = value
70
62
  when :owner
@@ -80,9 +72,6 @@ module Hydra
80
72
  @values[key]
81
73
  when :inheritable
82
74
  inheritable
83
- when :embargo_release_date
84
- Deprecation.warn PermissionsConfig, "[:embargo_release_date] is deprecated, use embargo.release_date= instead"
85
- embargo.release_date
86
75
  when :policy_class
87
76
  @policy_class
88
77
  else
@@ -118,7 +107,7 @@ module Hydra
118
107
  assign_value :edit, val
119
108
  end
120
109
 
121
- protected
110
+ protected
122
111
 
123
112
  def prefix
124
113
  end
@@ -128,7 +117,7 @@ module Hydra
128
117
  end
129
118
 
130
119
  def solr_name(*args)
131
- ActiveFedora::SolrService.solr_name(*args)
120
+ ActiveFedora::SolrQueryBuilder.solr_name(*args)
132
121
  end
133
122
 
134
123
  class EmbargoConfig
@@ -141,7 +130,7 @@ module Hydra
141
130
  end
142
131
 
143
132
  def solr_name(*args)
144
- ActiveFedora::SolrService.solr_name(*args)
133
+ ActiveFedora::SolrQueryBuilder.solr_name(*args)
145
134
  end
146
135
  end
147
136
 
@@ -155,7 +144,7 @@ module Hydra
155
144
  end
156
145
 
157
146
  def solr_name(*args)
158
- ActiveFedora::SolrService.solr_name(*args)
147
+ ActiveFedora::SolrQueryBuilder.solr_name(*args)
159
148
  end
160
149
  end
161
150
 
@@ -32,8 +32,8 @@ module Hydra
32
32
  #
33
33
  # Solr integration
34
34
  #
35
-
36
- # returns a params hash with the permissions info for a single solr document
35
+
36
+ # returns a params hash with the permissions info for a single solr document
37
37
  # If the id arg is nil, then the value is fetched from params[:id]
38
38
  # This method is primary called by the get_permissions_solr_response_for_doc_id method.
39
39
  # Modeled on Blacklight::SolrHelper.solr_doc_params
@@ -1,13 +1,11 @@
1
1
  class Hydra::PermissionsSolrDocument < SolrDocument
2
-
3
2
  def under_embargo?
4
- embargo_key = ActiveFedora::SolrService.solr_name("embargo_release_date", Hydra::Datastream::RightsMetadata.date_indexer)
5
- if self[embargo_key]
3
+ #permissions = permissions_doc(params[:id])
4
+ embargo_key = Hydra.config.permissions.embargo.release_date
5
+ if self[embargo_key]
6
6
  embargo_date = Date.parse(self[embargo_key].split(/T/)[0])
7
7
  return embargo_date > Date.parse(Time.now.to_s)
8
8
  end
9
9
  false
10
- end
11
-
10
+ end
12
11
  end
13
-