fcrepo_admin 0.3.5 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +7 -0
  2. data/HISTORY.rdoc +6 -0
  3. data/README.rdoc +42 -20
  4. data/app/controllers/fcrepo_admin/associations_controller.rb +7 -0
  5. data/app/controllers/fcrepo_admin/objects_controller.rb +2 -1
  6. data/app/helpers/fcrepo_admin/associations_helper.rb +5 -0
  7. data/app/views/fcrepo_admin/associations/_associations.html.erb +26 -0
  8. data/app/views/fcrepo_admin/associations/index.html.erb +1 -0
  9. data/app/views/fcrepo_admin/associations/show.html.erb +11 -0
  10. data/app/views/fcrepo_admin/catalog/_document.html.erb +6 -0
  11. data/app/views/fcrepo_admin/datastreams/_content.html.erb +4 -3
  12. data/app/views/fcrepo_admin/datastreams/_context_nav.html.erb +9 -0
  13. data/app/views/fcrepo_admin/datastreams/_context_nav_items.html.erb +21 -0
  14. data/app/views/fcrepo_admin/datastreams/{_datastreams.html → _datastreams.html.erb} +16 -3
  15. data/app/views/fcrepo_admin/datastreams/_profile.html.erb +9 -10
  16. data/app/views/fcrepo_admin/datastreams/content.html.erb +1 -0
  17. data/app/views/fcrepo_admin/datastreams/index.html.erb +1 -4
  18. data/app/views/fcrepo_admin/datastreams/show.html.erb +1 -14
  19. data/app/views/fcrepo_admin/objects/_context_nav.html.erb +9 -0
  20. data/app/views/fcrepo_admin/objects/_context_nav_datastreams.html.erb +13 -0
  21. data/app/views/fcrepo_admin/objects/_context_nav_items.html.erb +19 -0
  22. data/app/views/fcrepo_admin/objects/_direct_permissions.html.erb +8 -0
  23. data/app/views/fcrepo_admin/objects/_inherited_permissions.html.erb +23 -0
  24. data/app/views/fcrepo_admin/objects/_permissions_list.html.erb +18 -0
  25. data/app/views/fcrepo_admin/objects/{_permissions_row.html.erb → _permissions_list_item.html.erb} +0 -0
  26. data/app/views/fcrepo_admin/objects/_properties.html.erb +6 -5
  27. data/app/views/fcrepo_admin/objects/permissions.html.erb +5 -0
  28. data/app/views/fcrepo_admin/objects/show.html.erb +3 -46
  29. data/app/views/layouts/fcrepo_admin/datastreams.html.erb +2 -2
  30. data/app/views/layouts/fcrepo_admin/objects.html.erb +1 -1
  31. data/config/locales/fcrepo_admin.en.yml +24 -4
  32. data/config/routes.rb +7 -2
  33. data/lib/fcrepo_admin.rb +4 -1
  34. data/lib/fcrepo_admin/ability.rb +18 -0
  35. data/lib/fcrepo_admin/controller/associations_controller_behavior.rb +49 -0
  36. data/lib/fcrepo_admin/controller/catalog_controller_behavior.rb +9 -0
  37. data/lib/fcrepo_admin/controller/controller_behavior.rb +49 -0
  38. data/lib/fcrepo_admin/controller/datastreams_controller_behavior.rb +21 -28
  39. data/lib/fcrepo_admin/controller/objects_controller_behavior.rb +7 -32
  40. data/lib/fcrepo_admin/helpers/associations_helper_behavior.rb +23 -0
  41. data/lib/fcrepo_admin/helpers/datastreams_helper_behavior.rb +7 -10
  42. data/lib/fcrepo_admin/helpers/fcrepo_admin_helper_behavior.rb +5 -10
  43. data/lib/fcrepo_admin/helpers/objects_helper_behavior.rb +0 -36
  44. data/lib/fcrepo_admin/version.rb +1 -1
  45. data/spec/controllers/associations_controller_spec.rb +34 -0
  46. data/spec/controllers/datastreams_controller_spec.rb +14 -12
  47. data/spec/controllers/objects_controller_spec.rb +6 -6
  48. data/spec/factories/fcrepo_admin_factories.rb +10 -6
  49. data/spec/features/associations/index.html.erb_spec.rb +28 -0
  50. data/spec/features/datastreams/edit.html.erb_spec.rb +1 -1
  51. data/spec/features/datastreams/index.html.erb_spec.rb +12 -0
  52. data/spec/features/datastreams/show.html.erb_spec.rb +1 -1
  53. data/spec/features/datastreams/upload.html.erb_spec.rb +1 -1
  54. data/spec/features/objects/audit_trail.html.erb_spec.rb +1 -1
  55. data/spec/features/objects/permissions.html.erb_spec.rb +19 -0
  56. data/spec/features/objects/show.html.erb_spec.rb +7 -30
  57. data/spec/internal/app/models/ability.rb +1 -1
  58. data/spec/internal/app/models/admin_policy.rb +3 -0
  59. data/spec/internal/app/models/collection.rb +14 -0
  60. data/spec/internal/app/models/item.rb +15 -0
  61. data/spec/internal/app/models/{content_model.rb → part.rb} +2 -1
  62. metadata +65 -73
  63. data/app/views/fcrepo_admin/datastreams/_datastream_nav.html.erb +0 -18
  64. data/app/views/fcrepo_admin/objects/_more_info.html.erb +0 -6
  65. data/app/views/fcrepo_admin/objects/_permissions.html.erb +0 -12
  66. data/app/views/fcrepo_admin/objects/_permissions_header.html.erb +0 -7
  67. data/lib/fcrepo_admin/datastream_ability.rb +0 -22
@@ -1,8 +1,9 @@
1
- <table class="table table-bordered table-condensed">
1
+ <h3><%= t("fcrepo_admin.object.properties.title") %></h3>
2
+ <table class="table" style="width: auto">
2
3
  <% object_properties.each do |key, value| %>
3
- <tr>
4
- <th scope="row"><%= t("fcrepo_admin.object.properties.keys.#{key}") %></th>
5
- <td><%= value %></td>
6
- </tr>
4
+ <tr>
5
+ <th scope="row"><%= t("fcrepo_admin.object.properties.keys.#{key}") %>:</th>
6
+ <td><%= value %></td>
7
+ </tr>
7
8
  <% end %>
8
9
  </table>
@@ -0,0 +1,5 @@
1
+ <h3><%= t("fcrepo_admin.object.permissions.title") %></h3>
2
+ <%= render :partial => 'direct_permissions', :locals => {:object => @object} %>
3
+ <%= render 'inherited_permissions' %>
4
+
5
+
@@ -1,46 +1,3 @@
1
- <div class="tabbable">
2
- <ul class="nav nav-tabs">
3
- <li class="active"><a href="#tab-datastreams" data-toggle="tab"><%= t("fcrepo_admin.object.tabs.datastreams") %></a></li>
4
- <li><a href="#tab-properties" data-toggle="tab"><%= t("fcrepo_admin.object.tabs.properties") %></a></li>
5
- <li><a href="#tab-permissions" data-toggle="tab"><%= t("fcrepo_admin.object.tabs.permissions") %></a></li>
6
- </ul>
7
- <div class="tab-content">
8
- <div class="tab-pane active" id="tab-datastreams">
9
- <%= render :partial => 'fcrepo_admin/datastreams/datastreams', :locals => {:datastreams => @object.datastreams} %>
10
- </div>
11
- <div class="tab-pane" id="tab-properties">
12
- <%= render 'properties' %>
13
- </div>
14
- <div class="tab-pane" id="tab-permissions">
15
- <% if object_has_permissions? %>
16
- <h4>Direct Permissions</h4>
17
- <%= render :partial => 'permissions', :locals => {:permissions => @object.permissions} %>
18
- <h4>Inherited Permissions</h4>
19
- <% unless admin_policy_enforcement_enabled? %>
20
- <p class="alert">
21
- <%= t("fcrepo_admin.object.apo.enforcement_disabled") %>.
22
- </p>
23
- <% end %>
24
- <% if object_model_belongs_to_apo? %>
25
- <p>
26
- <%= t("fcrepo_admin.object.apo.governed_by") %>:
27
- <% if object_has_admin_policy? %>
28
- <%= link_to object_admin_policy.pid, fcrepo_admin.object_path(object_admin_policy) %>
29
- <% else %>
30
- <span class="label"><%= t("fcrepo_admin.object.apo.not_assigned") %></span>
31
- <% end %>
32
- </p>
33
- <% if object_has_inherited_permissions? %>
34
- <%= render :partial => 'permissions', :locals => {:permissions => object_inherited_permissions} %>
35
- <% end %>
36
- <% else %>
37
- <p class="alert alert-info">
38
- <%= t("fcrepo_admin.object.apo.relationship_undefined") %>: <%= object_type %>.
39
- </p>
40
- <% end %>
41
- <% else %>
42
- <%= t("fcrepo_admin.object.permissions.not_supported") %>: <%= object_type %>.
43
- <% end %>
44
- </div> <!-- /tab-permissions -->
45
- </div>
46
- </div>
1
+ <%= render_document_partial @document, :show %>
2
+ <%= render 'properties' %>
3
+
@@ -4,7 +4,7 @@
4
4
  <%= yield %>
5
5
  <% end %>
6
6
  <% content_for :sidebar do %>
7
- <%= render_object_context_nav %>
8
- <%= render_datastream_context_nav %>
7
+ <%= render 'fcrepo_admin/objects/context_nav' %>
8
+ <%= render 'fcrepo_admin/datastreams/context_nav' %>
9
9
  <% end %>
10
10
  <%= render :template => 'layouts/fcrepo_admin/default' %>
@@ -3,6 +3,6 @@
3
3
  <%= yield %>
4
4
  <% end %>
5
5
  <% content_for :sidebar do %>
6
- <%= render_object_context_nav %>
6
+ <%= render 'fcrepo_admin/objects/context_nav' %>
7
7
  <% end %>
8
8
  <%= render :template => 'layouts/fcrepo_admin/default' %>
@@ -5,11 +5,16 @@ en:
5
5
  datastreams: 'Datastreams'
6
6
  properties: 'Properties'
7
7
  permissions: 'Permissions'
8
+ associations: 'Associations'
8
9
  nav:
9
10
  header: 'Object Admin'
10
11
  items:
11
- summary: 'Object Summary'
12
+ summary: 'Basic View'
12
13
  audit_trail: 'Audit Trail'
14
+ permissions: 'Permissions'
15
+ properties: 'Properties'
16
+ datastreams: 'Datastreams'
17
+ associations: 'Associations'
13
18
  properties:
14
19
  title: 'Properties'
15
20
  keys:
@@ -19,15 +24,28 @@ en:
19
24
  modified_date: 'Modified Date'
20
25
  label: 'Label'
21
26
  permissions:
27
+ title: 'Permissions'
22
28
  no_permissions: 'No permissions.'
23
29
  not_supported: 'This object type does not support Hydra permissions'
30
+ direct: 'Direct Permissions'
31
+ inherited: 'Inherited Permissions'
24
32
  header:
25
33
  type: 'Type'
26
34
  name: 'Name'
27
35
  access: 'Access'
36
+ associations:
37
+ title: 'Associations'
38
+ not_assigned: 'not assigned'
39
+ collection_target: 'object'
40
+ header:
41
+ macro: 'Macro'
42
+ name: 'Association Name'
43
+ target: 'Target Object(s)'
44
+ class_name: 'Target Object Type'
45
+ property: 'Property/Predicate'
28
46
  apo:
29
- governed_by: 'Governed By'
30
- not_assigned: 'Not Assigned'
47
+ governed_by: 'Governed by admin policy object'
48
+ not_assigned: 'This object is not governed by an admin policy object'
31
49
  enforcement_disabled: 'Admin policy access control enforcement is disabled'
32
50
  relationship_undefined: 'This object type does not define an admin policy relationship'
33
51
  audit_trail:
@@ -44,6 +62,7 @@ en:
44
62
  justification: 'Justification'
45
63
  datastreams:
46
64
  title: 'Datastreams'
65
+ not_persisted: 'Not persisted'
47
66
  header:
48
67
  id: 'Datastream ID'
49
68
  label: 'Label'
@@ -54,7 +73,8 @@ en:
54
73
  nav:
55
74
  header: 'Datastream Admin'
56
75
  items:
57
- summary: 'Datastream Summary'
76
+ summary: 'Profile'
77
+ content: 'View Content'
58
78
  edit: 'Edit Content'
59
79
  upload: 'Upload Content'
60
80
  download: 'Download Content'
data/config/routes.rb CHANGED
@@ -2,9 +2,14 @@ FcrepoAdmin::Engine.routes.draw do
2
2
 
3
3
  scope :module => "fcrepo_admin" do
4
4
  resources :objects, :only => :show do
5
- get 'audit_trail', :on => :member
6
- resources :datastreams, :only => [:show, :edit, :update] do
5
+ member do
6
+ get 'audit_trail'
7
+ get 'permissions'
8
+ end
9
+ resources :associations, :only => [:index, :show]
10
+ resources :datastreams, :only => [:index, :show, :edit, :update] do
7
11
  member do
12
+ get 'content'
8
13
  get 'upload'
9
14
  get 'download'
10
15
  end
data/lib/fcrepo_admin.rb CHANGED
@@ -4,16 +4,19 @@ require 'hydra/head'
4
4
 
5
5
  module FcrepoAdmin
6
6
  autoload :SolrDocumentExtension, 'fcrepo_admin/solr_document_extension'
7
- autoload :DatastreamAbility, 'fcrepo_admin/datastream_ability'
7
+ autoload :Ability, 'fcrepo_admin/ability'
8
8
  module Helpers
9
9
  autoload :BlacklightHelperBehavior, 'fcrepo_admin/helpers/blacklight_helper_behavior'
10
10
  autoload :ObjectsHelperBehavior, 'fcrepo_admin/helpers/objects_helper_behavior'
11
11
  autoload :DatastreamsHelperBehavior, 'fcrepo_admin/helpers/datastreams_helper_behavior'
12
+ autoload :AssociationsHelperBehavior, 'fcrepo_admin/helpers/associations_helper_behavior'
12
13
  autoload :FcrepoAdminHelperBehavior, 'fcrepo_admin/helpers/fcrepo_admin_helper_behavior'
13
14
  end
14
15
  module Controller
15
16
  autoload :ControllerBehavior, 'fcrepo_admin/controller/controller_behavior'
16
17
  autoload :ObjectsControllerBehavior, 'fcrepo_admin/controller/objects_controller_behavior'
17
18
  autoload :DatastreamsControllerBehavior, 'fcrepo_admin/controller/datastreams_controller_behavior'
19
+ autoload :AssociationsControllerBehavior, 'fcrepo_admin/controller/associations_controller_behavior'
20
+ autoload :CatalogControllerBehavior, 'fcrepo_admin/controller/catalog_controller_behavior'
18
21
  end
19
22
  end
@@ -0,0 +1,18 @@
1
+ module FcrepoAdmin
2
+ module Ability
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ self.ability_logic += [:fcrepo_admin_aliases]
7
+ end
8
+
9
+ def fcrepo_admin_aliases
10
+ alias_action :download, :to => :read
11
+ alias_action :audit_trail, :to => :read
12
+ alias_action :permissions, :to => :read
13
+ alias_action :content, :to => :read
14
+ alias_action :upload, :to => :update
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,49 @@
1
+ module FcrepoAdmin::Controller
2
+ module AssociationsControllerBehavior
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ layout 'fcrepo_admin/objects'
7
+
8
+ include FcrepoAdmin::Controller::ControllerBehavior
9
+
10
+ before_filter :load_and_authorize_object
11
+ before_filter :load_association, :only => :show
12
+ end
13
+
14
+ def index
15
+ end
16
+
17
+ def show
18
+ if @association.collection?
19
+ self.solr_search_params_logic += [:association_filter]
20
+ @response, @documents = get_search_results({:qt => 'standard'})
21
+ else
22
+ target = @object.send("#{@association.name}_id")
23
+ if target
24
+ redirect_to :controller => 'objects', :action => 'show', :id => target, :use_route => 'fcrepo_admin'
25
+ else
26
+ render :text => "Target not found", :status => 404
27
+ end
28
+ end
29
+ end
30
+
31
+ def association_filter(solr_params, user_params)
32
+ solr_params[:q] = construct_query
33
+ end
34
+
35
+ protected
36
+
37
+ # Copied from ActiveFedora::Associations::AssociationCollection
38
+ def construct_query
39
+ clauses = {@association.options[:property] => @object.internal_uri}
40
+ clauses[:has_model] = @association.class_name.constantize.to_class_uri if @association.class_name && @association.class_name != 'ActiveFedora::Base'
41
+ ActiveFedora::SolrService.construct_query_for_rel(clauses)
42
+ end
43
+
44
+ def load_association
45
+ @association = @object.reflections[params[:id].to_sym] # XXX raise exception if nil
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,9 @@
1
+ module FcrepoAdmin::Controller
2
+ module CatalogControllerBehavior
3
+
4
+ def search_action_url
5
+ url_for(:controller => '/catalog', :action => 'index', :only_path => true)
6
+ end
7
+
8
+ end
9
+ end
@@ -4,6 +4,25 @@ module FcrepoAdmin::Controller
4
4
 
5
5
  included do
6
6
  helper_method :object_is_auditable?
7
+ helper_method :object_is_governable?
8
+ helper_method :object_is_governed_by
9
+ helper_method :admin_policy_enforcement_enabled?
10
+ end
11
+
12
+ protected
13
+
14
+ def load_and_authorize_object
15
+ load_object
16
+ authorize_object
17
+ end
18
+
19
+ def load_object
20
+ id = params[:object_id] || params[:id]
21
+ @object = ActiveFedora::Base.find(id, :cast => true)
22
+ end
23
+
24
+ def authorize_object
25
+ authorize! params[:action].to_sym, @object
7
26
  end
8
27
 
9
28
  def object_is_auditable?
@@ -14,5 +33,35 @@ module FcrepoAdmin::Controller
14
33
  end
15
34
  end
16
35
 
36
+ def admin_policy_enforcement_enabled?
37
+ # Including Hydra::PolicyAwareAccessControlsEnforcement in ApplicationController
38
+ # appears to be the only way that APO access control enforcement can be enabled.
39
+ self.class.ancestors.include?(Hydra::PolicyAwareAccessControlsEnforcement)
40
+ end
41
+
42
+ def object_is_governed_by
43
+ @object_is_governed_by ||= object_is_governable? && @object.send(is_governed_by_association_name)
44
+ end
45
+
46
+ def object_is_governable?
47
+ !is_governed_by_association_name.nil?
48
+ end
49
+
50
+ def is_governed_by_association_name
51
+ @object.reflections.each do |name, reflection|
52
+ if reflection.macro == :belongs_to && reflection.options[:property] == :is_governed_by # && reflection.class_name == admin_policy_class.to_s
53
+ return reflection.name
54
+ end
55
+ end
56
+ end
57
+
58
+ def admin_policy_class
59
+ # XXX Ideally we would use Hydra::PolicyAwareAccessControlsEnforcement#policy_class,
60
+ # but it's only available if it's been included in the application controller, i.e.,
61
+ # if APO access control enforcement is enabled. We want to know the name of the
62
+ # relationship regardless of whether policy enforcement is enabled.
63
+ Hydra.config[:permissions].fetch(:policy_class, Hydra::AdminPolicy)
64
+ end
65
+
17
66
  end
18
67
  end
@@ -5,19 +5,31 @@ module FcrepoAdmin::Controller
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- layout 'fcrepo_admin/datastreams'
8
+ layout 'fcrepo_admin/datastreams', :except => :index
9
+ layout 'fcrepo_admin/objects', :only => :index
10
+
9
11
  include FcrepoAdmin::Controller::ControllerBehavior
10
- before_filter :load_and_authorize_datastream
11
- before_filter :inline_filter, :only => [:show, :edit]
12
+
13
+ before_filter :load_and_authorize_object
14
+ before_filter :load_datastream, :except => :index
15
+
16
+ helper_method :ds_content_is_text?
17
+ helper_method :ds_content_is_editable?
12
18
  end
13
19
 
14
20
  # Additional types of content that should be displayed inline
15
21
  TEXT_MIME_TYPES = ['application/xml', 'application/rdf+xml', 'application/json']
16
22
  MAX_INLINE_SIZE = 1024 * 64
17
23
 
24
+ def index
25
+ end
26
+
18
27
  def show
19
28
  end
20
29
 
30
+ def content
31
+ end
32
+
21
33
  def download
22
34
  mimetypes = MIME::Types[@datastream.mimeType]
23
35
  send_data @datastream.content, :disposition => 'attachment', :type => @datastream.mimeType, :filename => "#{@datastream.pid.sub(/:/, '_')}_#{@datastream.dsid}.#{mimetypes.first.extensions.first}"
@@ -41,38 +53,19 @@ module FcrepoAdmin::Controller
41
53
  end
42
54
 
43
55
  private
44
-
45
- def load_and_authorize_datastream
46
- load_object
47
- load_datastream
48
- authorize_datastream
49
- end
50
56
 
51
- def load_object
52
- @object = ActiveFedora::Base.find(params[:object_id], :cast => true)
53
- end
54
-
55
57
  def load_datastream
56
58
  @datastream = @object.datastreams[params[:id]]
57
59
  end
58
60
 
59
- def authorize_datastream
60
- action = case params[:action]
61
- when 'upload'
62
- :edit
63
- when 'download'
64
- :read
65
- else
66
- params[:action].to_sym
67
- end
68
- # Datastream permissions are solely based on object permissions
69
- authorize! action, @object
70
- end
71
-
72
61
  protected
73
62
 
74
- def inline_filter
75
- @inline = (@datastream.mimeType.start_with?('text/') || TEXT_MIME_TYPES.include?(@datastream.mimeType)) && @datastream.dsSize <= MAX_INLINE_SIZE
63
+ def ds_content_is_text?
64
+ @datastream.mimeType.start_with?('text/') || TEXT_MIME_TYPES.include?(@datastream.mimeType)
65
+ end
66
+
67
+ def ds_content_is_editable?
68
+ ds_content_is_text? && (@datastream.dsSize <= MAX_INLINE_SIZE)
76
69
  end
77
70
 
78
71
  end
@@ -4,15 +4,19 @@ module FcrepoAdmin::Controller
4
4
 
5
5
  included do
6
6
  layout 'fcrepo_admin/objects'
7
+
7
8
  include FcrepoAdmin::Controller::ControllerBehavior
9
+
8
10
  helper_method :object_properties
9
- before_filter :load_and_authorize_object
10
- before_filter :load_apo_info, :only => :show
11
+
12
+ before_filter :load_and_authorize_object, :except => :show
11
13
  end
12
14
 
13
15
  PROPERTIES = [:owner_id, :state, :create_date, :modified_date, :label]
14
16
 
15
17
  def show
18
+ @response, @document = get_solr_response_for_doc_id(params[:id])
19
+ @object = ActiveFedora::SolrService.reify_solr_results([@document], :load_from_solr => true).first
16
20
  end
17
21
 
18
22
  def audit_trail
@@ -25,20 +29,7 @@ module FcrepoAdmin::Controller
25
29
  end
26
30
  end
27
31
 
28
- private
29
-
30
- def load_and_authorize_object
31
- load_object
32
- authorize_object
33
- end
34
-
35
- def load_object
36
- @object = ActiveFedora::Base.find(params[:id], :cast => true)
37
- end
38
-
39
- def authorize_object
40
- action = params[:action] == 'audit_trail' ? :read : params[:action].to_sym
41
- authorize! action, @object
32
+ def permissions
42
33
  end
43
34
 
44
35
  protected
@@ -47,21 +38,5 @@ module FcrepoAdmin::Controller
47
38
  @object_properties ||= PROPERTIES.inject(Hash.new) { |h, p| h[p] = @object.send(p); h }
48
39
  end
49
40
 
50
- def apo_relationship_name
51
- @object.reflections.each_value do |reflection|
52
- # XXX This test should also check that reflection class is identical to admin policy class
53
- return reflection.name if reflection.options[:property] == :is_governed_by && reflection.macro == :belongs_to
54
- end
55
- nil
56
- end
57
-
58
- def load_apo_info
59
- @apo_relationship_name ||= apo_relationship_name
60
- @object_admin_policy ||= @apo_relationship_name ? @object.send(@apo_relationship_name) : nil
61
- # Including Hydra::PolicyAwareAccessControlsEnforcement in ApplicationController
62
- # appears to be the only way that APO access control enforcement can be enabled.
63
- @apo_enforcement_enabled ||= self.class.ancestors.include?(Hydra::PolicyAwareAccessControlsEnforcement)
64
- end
65
-
66
41
  end
67
42
  end