hydra-access-controls 8.2.0 → 9.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
-