blacklight-access_controls 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/Gemfile +32 -0
- data/README.textile +74 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/blacklight-access_controls.gemspec +29 -0
- data/lib/blacklight-access_controls.rb +23 -0
- data/lib/blacklight/access_controls.rb +14 -0
- data/lib/blacklight/access_controls/ability.rb +148 -0
- data/lib/blacklight/access_controls/catalog.rb +27 -0
- data/lib/blacklight/access_controls/config.rb +39 -0
- data/lib/blacklight/access_controls/enforcement.rb +103 -0
- data/lib/blacklight/access_controls/permissions_cache.rb +19 -0
- data/lib/blacklight/access_controls/permissions_query.rb +53 -0
- data/lib/blacklight/access_controls/permissions_solr_document.rb +2 -0
- data/lib/blacklight/access_controls/user.rb +23 -0
- data/lib/generators/blacklight/ability.rb +4 -0
- data/lib/generators/blacklight/access_controls_generator.rb +49 -0
- data/solr_conf/conf/abc123 +0 -0
- data/solr_conf/conf/admin-extra.html +24 -0
- data/solr_conf/conf/admin-extra.menu-bottom.html +25 -0
- data/solr_conf/conf/admin-extra.menu-top.html +25 -0
- data/solr_conf/conf/clustering/carrot2/kmeans-attributes.xml +19 -0
- data/solr_conf/conf/clustering/carrot2/lingo-attributes.xml +24 -0
- data/solr_conf/conf/clustering/carrot2/stc-attributes.xml +19 -0
- data/solr_conf/conf/currency.xml +67 -0
- data/solr_conf/conf/dataimport.properties +3 -0
- data/solr_conf/conf/db-data-config.xml +93 -0
- data/solr_conf/conf/elevate.xml +38 -0
- data/solr_conf/conf/lang/contractions_ca.txt +8 -0
- data/solr_conf/conf/lang/contractions_fr.txt +15 -0
- data/solr_conf/conf/lang/contractions_ga.txt +5 -0
- data/solr_conf/conf/lang/contractions_it.txt +23 -0
- data/solr_conf/conf/lang/hyphenations_ga.txt +5 -0
- data/solr_conf/conf/lang/stemdict_nl.txt +6 -0
- data/solr_conf/conf/lang/stoptags_ja.txt +420 -0
- data/solr_conf/conf/lang/stopwords_ar.txt +125 -0
- data/solr_conf/conf/lang/stopwords_bg.txt +193 -0
- data/solr_conf/conf/lang/stopwords_ca.txt +220 -0
- data/solr_conf/conf/lang/stopwords_ckb.txt +136 -0
- data/solr_conf/conf/lang/stopwords_cz.txt +172 -0
- data/solr_conf/conf/lang/stopwords_da.txt +110 -0
- data/solr_conf/conf/lang/stopwords_de.txt +294 -0
- data/solr_conf/conf/lang/stopwords_el.txt +78 -0
- data/solr_conf/conf/lang/stopwords_en.txt +54 -0
- data/solr_conf/conf/lang/stopwords_es.txt +356 -0
- data/solr_conf/conf/lang/stopwords_eu.txt +99 -0
- data/solr_conf/conf/lang/stopwords_fa.txt +313 -0
- data/solr_conf/conf/lang/stopwords_fi.txt +97 -0
- data/solr_conf/conf/lang/stopwords_fr.txt +186 -0
- data/solr_conf/conf/lang/stopwords_ga.txt +110 -0
- data/solr_conf/conf/lang/stopwords_gl.txt +161 -0
- data/solr_conf/conf/lang/stopwords_hi.txt +235 -0
- data/solr_conf/conf/lang/stopwords_hu.txt +211 -0
- data/solr_conf/conf/lang/stopwords_hy.txt +46 -0
- data/solr_conf/conf/lang/stopwords_id.txt +359 -0
- data/solr_conf/conf/lang/stopwords_it.txt +303 -0
- data/solr_conf/conf/lang/stopwords_ja.txt +127 -0
- data/solr_conf/conf/lang/stopwords_lv.txt +172 -0
- data/solr_conf/conf/lang/stopwords_nl.txt +119 -0
- data/solr_conf/conf/lang/stopwords_no.txt +194 -0
- data/solr_conf/conf/lang/stopwords_pt.txt +253 -0
- data/solr_conf/conf/lang/stopwords_ro.txt +233 -0
- data/solr_conf/conf/lang/stopwords_ru.txt +243 -0
- data/solr_conf/conf/lang/stopwords_sv.txt +133 -0
- data/solr_conf/conf/lang/stopwords_th.txt +119 -0
- data/solr_conf/conf/lang/stopwords_tr.txt +212 -0
- data/solr_conf/conf/lang/userdict_ja.txt +29 -0
- data/solr_conf/conf/mapping-FoldToASCII.txt +3813 -0
- data/solr_conf/conf/mapping-ISOLatin1Accent.txt +246 -0
- data/solr_conf/conf/protwords.txt +21 -0
- data/solr_conf/conf/schema.blacklight.xml +724 -0
- data/solr_conf/conf/schema.xml +1268 -0
- data/solr_conf/conf/schema.xml.orig +1524 -0
- data/solr_conf/conf/solrconfig.adams.xml +1903 -0
- data/solr_conf/conf/solrconfig.blacklight.xml +411 -0
- data/solr_conf/conf/solrconfig.old.xml +1634 -0
- data/solr_conf/conf/solrconfig.xml +332 -0
- data/solr_conf/conf/solrconfig.xml.orig +3531 -0
- data/solr_conf/conf/spellings.txt +2 -0
- data/solr_conf/conf/stopwords.txt +14 -0
- data/solr_conf/conf/synonyms.txt +29 -0
- data/solr_conf/conf/update-script.js +53 -0
- data/solr_conf/conf/xslt/example.xsl +132 -0
- data/solr_conf/conf/xslt/example_atom.xsl +67 -0
- data/solr_conf/conf/xslt/example_rss.xsl +66 -0
- data/solr_conf/conf/xslt/luke.xsl +337 -0
- data/solr_conf/conf/xslt/updateXml.xsl +70 -0
- data/spec/factories/user.rb +6 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/support/solr_support.rb +11 -0
- data/spec/test_app_templates/blacklight.yml +18 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +25 -0
- data/spec/unit/ability_spec.rb +202 -0
- data/spec/unit/catalog_spec.rb +41 -0
- data/spec/unit/config_spec.rb +69 -0
- data/spec/unit/enforcement_spec.rb +147 -0
- metadata +265 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 715bccb2faf2cc502417ad8d1f9052baf98c2c2e
|
4
|
+
data.tar.gz: c011219a6d76e3c0e6bba5640c9f5c92eb5fe300
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d80acc63c003ee2d3b84b5790bd5a755cea409efb58ee4311fd6e5b236712c3fbbb92e9609f6e93e948bc7cfae7bd0938dfad4f51e6d109a603ce3dc4ea4dfdd
|
7
|
+
data.tar.gz: 54dfe0310b6df052616602eb53d0f916e431717f0a918b0d436e992d8ee9eacb03312d5b69de7be2d880f62bfc0ee1d10db2b653c66b60195321790a526cafad
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
# Specify gem dependencies in blacklight-access_controls.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
# -------------------------
|
7
|
+
# BEGIN ENGINE_CART BLOCK
|
8
|
+
# engine_cart: 0.8.0
|
9
|
+
# engine_cart stanza: 0.8.0
|
10
|
+
# the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
|
11
|
+
file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path(".internal_test_app", File.dirname(__FILE__)))
|
12
|
+
if File.exist?(file)
|
13
|
+
begin
|
14
|
+
eval_gemfile file
|
15
|
+
rescue Bundler::GemfileError => e
|
16
|
+
Bundler.ui.warn '[EngineCart] Skipping Rails application dependencies:'
|
17
|
+
Bundler.ui.warn e.message
|
18
|
+
end
|
19
|
+
else
|
20
|
+
Bundler.ui.warn "[EngineCart] Unable to find test application dependencies in #{file}, using placeholder dependencies"
|
21
|
+
|
22
|
+
gem 'rails', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
|
23
|
+
|
24
|
+
if ENV['RAILS_VERSION'].nil? || ENV['RAILS_VERSION'] =~ /^4.2/
|
25
|
+
gem 'responders', "~> 2.0"
|
26
|
+
gem 'sass-rails', ">= 5.0"
|
27
|
+
else
|
28
|
+
gem 'sass-rails', "< 5.0"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
# END ENGINE_CART BLOCK
|
32
|
+
# -------------------------
|
data/README.textile
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
h1. Blacklight Access Controls
|
2
|
+
|
3
|
+
Provides access controls for Blacklight-based applications.
|
4
|
+
|
5
|
+
*Background*: Much of this code was extracted from "hydra-access-controls":https://github.com/projecthydra/hydra-head/tree/master/hydra-access-controls
|
6
|
+
|
7
|
+
|
8
|
+
h2. Adding Access Controls to a Blacklight App
|
9
|
+
|
10
|
+
h3. Install the gem
|
11
|
+
|
12
|
+
* Add blacklight-access_controls to your Gemfile
|
13
|
+
* bundle install
|
14
|
+
|
15
|
+
h3. Configure solr
|
16
|
+
|
17
|
+
* Make sure your solrconfig.xml has a requestHandler for "permissions". For an example, see solr_conf/conf/solrconfig.xml.
|
18
|
+
|
19
|
+
* If you use solr field names that don't match the default field names used in Blacklight::AccessControls::Config for the "permissions" handler, you'll need to create a Rails initializer to set those values in Blacklight::AccessControls::Config.
|
20
|
+
|
21
|
+
h3. Run the generator
|
22
|
+
|
23
|
+
<pre>
|
24
|
+
rails generate blacklight:access_controls
|
25
|
+
</pre>
|
26
|
+
|
27
|
+
|
28
|
+
h2. Using Access Controls
|
29
|
+
|
30
|
+
Some notes about using blacklight-access_controls within your Blacklight app:
|
31
|
+
|
32
|
+
* You can grant access to a record to specific users or groups by adding them to the correct fields in the solr document. For example, discover_access_group_ssim: "public" or read_access_person_ssim: "frodo@example.com".
|
33
|
+
|
34
|
+
* The gem expects user.groups to return a list of groups that the user belongs to. By default, all users belong to a group called "public", and all logged-in users belong to a group called "registered".
|
35
|
+
|
36
|
+
* If you want a record to be readable by the public, you need to add "public" to the "read_access_group_ssim" field in the solr document, or if you want discover-only access, add "public" to "discover_access_group_ssim". (Discover-only means that the user can see that the record exists in a catalog search, but won't be able to view the record itself.)
|
37
|
+
|
38
|
+
|
39
|
+
h2. Developer Notes
|
40
|
+
|
41
|
+
This section contains information about working on the blacklight-access_controls gem itself.
|
42
|
+
|
43
|
+
h3. Set up Solr
|
44
|
+
|
45
|
+
<pre>
|
46
|
+
$ bundle exec rake solr:clean
|
47
|
+
$ bundle exec rake solr:config
|
48
|
+
$ bundle exec rake solr:start
|
49
|
+
$ bundle exec rake solr:stop
|
50
|
+
</pre>
|
51
|
+
|
52
|
+
h3. Generate a Rails test app
|
53
|
+
|
54
|
+
<pre>
|
55
|
+
$ bundle exec rake engine_cart:clean
|
56
|
+
$ bundle exec rake engine_cart:generate
|
57
|
+
</pre>
|
58
|
+
|
59
|
+
h3. Run the test suite
|
60
|
+
|
61
|
+
<pre>
|
62
|
+
$ bundle exec rake engine_cart:clean
|
63
|
+
$ bundle exec rake engine_cart:generate
|
64
|
+
$ bundle exec rake solr:spec
|
65
|
+
</pre>
|
66
|
+
|
67
|
+
h3. Run the Rails server in development mode
|
68
|
+
|
69
|
+
<pre>
|
70
|
+
$ bundle exec rake solr:start
|
71
|
+
$ bundle exec rake engine_cart:generate
|
72
|
+
$ bundle exec rake engine_cart:server
|
73
|
+
</pre>
|
74
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
require 'solr_wrapper'
|
4
|
+
|
5
|
+
SOLR_OPTIONS = {
|
6
|
+
verbose: true,
|
7
|
+
cloud: false,
|
8
|
+
port: '8983',
|
9
|
+
version: '5.3.1',
|
10
|
+
instance_dir: 'solr',
|
11
|
+
download_dir: 'tmp'
|
12
|
+
}
|
13
|
+
|
14
|
+
SolrWrapper.default_instance_options = SOLR_OPTIONS
|
15
|
+
|
16
|
+
require 'solr_wrapper/rake_task'
|
17
|
+
require 'engine_cart/rake_task'
|
18
|
+
|
19
|
+
require 'rspec/core/rake_task'
|
20
|
+
RSpec::Core::RakeTask.new(:spec)
|
21
|
+
|
22
|
+
task :default => 'solr:spec'
|
23
|
+
|
24
|
+
def solr_config_dir
|
25
|
+
File.join(File.expand_path(File.dirname(__FILE__)), "solr_conf", "conf")
|
26
|
+
end
|
27
|
+
|
28
|
+
namespace :solr do
|
29
|
+
|
30
|
+
desc 'Configure solr cores'
|
31
|
+
task :config do
|
32
|
+
SolrWrapper.wrap do |solr|
|
33
|
+
core = solr.create(name: 'development', dir: solr_config_dir)
|
34
|
+
core = solr.create(name: 'test', dir: solr_config_dir)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "Run test suite (with solr wrapper)"
|
39
|
+
task :spec do
|
40
|
+
SolrWrapper.wrap do |solr|
|
41
|
+
solr.with_collection(name:'test', dir: solr_config_dir) do |collection_name|
|
42
|
+
Rake::Task['spec'].invoke
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,29 @@
|
|
1
|
+
version = File.read(File.expand_path("../VERSION", __FILE__)).strip
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = "blacklight-access_controls"
|
5
|
+
|
6
|
+
gem.description = %q{Access controls for blacklight-based applications}
|
7
|
+
gem.summary = %q{Access controls for blacklight-based applications}
|
8
|
+
gem.homepage = "https://github.com/projectblacklight/blacklight-access_controls"
|
9
|
+
gem.email = ["blacklight-development@googlegroups.com"]
|
10
|
+
gem.authors = ["Chris Beer", "Justin Coyne", "Matt Zumwalt", "Valerie Maher"]
|
11
|
+
|
12
|
+
gem.files = `git ls-files`.split($\)
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.require_paths = ["lib"]
|
15
|
+
gem.version = version
|
16
|
+
gem.license = "APACHE2"
|
17
|
+
|
18
|
+
gem.required_ruby_version = '>= 1.9.3'
|
19
|
+
|
20
|
+
gem.add_dependency 'cancancan', '~> 1.8'
|
21
|
+
gem.add_dependency "blacklight", '~> 5.16'
|
22
|
+
|
23
|
+
gem.add_development_dependency "rake", '~> 10.1'
|
24
|
+
gem.add_development_dependency 'rspec', '~> 3.1'
|
25
|
+
gem.add_development_dependency "engine_cart", "~> 0.8"
|
26
|
+
gem.add_development_dependency "solr_wrapper"
|
27
|
+
gem.add_development_dependency "factory_girl_rails", "~> 4.0"
|
28
|
+
gem.add_development_dependency "database_cleaner"
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rails'
|
2
|
+
require 'cancan'
|
3
|
+
require 'blacklight'
|
4
|
+
require 'blacklight/access_controls'
|
5
|
+
|
6
|
+
module Blacklight::AccessControls
|
7
|
+
extend ActiveSupport::Autoload
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def configure
|
11
|
+
@config ||= Config.new
|
12
|
+
yield @config if block_given?
|
13
|
+
@config
|
14
|
+
end
|
15
|
+
alias :config :configure
|
16
|
+
end
|
17
|
+
|
18
|
+
# This error is raised when a user isn't allowed to access a given controller action.
|
19
|
+
# This usually happens within a call to Enforcement#enforce_access_controls but can be
|
20
|
+
# raised manually.
|
21
|
+
class AccessDenied < ::CanCan::AccessDenied; end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Blacklight
|
2
|
+
module AccessControls
|
3
|
+
extend ActiveSupport::Autoload
|
4
|
+
|
5
|
+
autoload :Config
|
6
|
+
autoload :User
|
7
|
+
autoload :PermissionsQuery
|
8
|
+
autoload :PermissionsCache
|
9
|
+
autoload :PermissionsSolrDocument
|
10
|
+
autoload :Ability
|
11
|
+
autoload :Enforcement
|
12
|
+
autoload :Catalog
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'cancan'
|
2
|
+
|
3
|
+
module Blacklight
|
4
|
+
module AccessControls
|
5
|
+
module Ability
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
include CanCan::Ability
|
10
|
+
include Blacklight::AccessControls::PermissionsQuery
|
11
|
+
|
12
|
+
# Once you include this module, you can add custom
|
13
|
+
# permission methods to ability_logic, like so:
|
14
|
+
# self.ability_logic +=[:setup_my_permissions]
|
15
|
+
class_attribute :ability_logic
|
16
|
+
self.ability_logic = [:discover_permissions, :read_permissions]
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(user, options={})
|
20
|
+
@current_user = user || guest_user
|
21
|
+
@options = options
|
22
|
+
@cache = Blacklight::AccessControls::PermissionsCache.new
|
23
|
+
grant_permissions
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_reader :current_user, :options, :cache
|
27
|
+
|
28
|
+
def self.user_class
|
29
|
+
Blacklight::AccessControls.config.user_model.constantize
|
30
|
+
end
|
31
|
+
|
32
|
+
# A user who isn't logged in
|
33
|
+
def guest_user
|
34
|
+
Blacklight::AccessControls::Ability.user_class.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def grant_permissions
|
38
|
+
Rails.logger.debug("Usergroups are " + user_groups.inspect)
|
39
|
+
self.ability_logic.each do |method|
|
40
|
+
send(method)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def discover_permissions
|
45
|
+
can :discover, String do |id|
|
46
|
+
test_discover(id)
|
47
|
+
end
|
48
|
+
|
49
|
+
can :discover, SolrDocument do |obj|
|
50
|
+
cache.put(obj.id, obj)
|
51
|
+
test_discover(obj.id)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def read_permissions
|
56
|
+
can :read, String do |id|
|
57
|
+
test_read(id)
|
58
|
+
end
|
59
|
+
|
60
|
+
can :read, SolrDocument do |obj|
|
61
|
+
cache.put(obj.id, obj)
|
62
|
+
test_read(obj.id)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_discover(id)
|
67
|
+
Rails.logger.debug("[CANCAN] Checking discover permissions for user: #{current_user.user_key} with groups: #{user_groups.inspect}")
|
68
|
+
group_intersection = user_groups & discover_groups(id)
|
69
|
+
!group_intersection.empty? || discover_users(id).include?(current_user.user_key)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_read(id)
|
73
|
+
Rails.logger.debug("[CANCAN] Checking read permissions for user: #{current_user.user_key} with groups: #{user_groups.inspect}")
|
74
|
+
group_intersection = user_groups & read_groups(id)
|
75
|
+
!group_intersection.empty? || read_users(id).include?(current_user.user_key)
|
76
|
+
end
|
77
|
+
|
78
|
+
# You can override this method if you are using a different AuthZ (such as LDAP)
|
79
|
+
def user_groups
|
80
|
+
return @user_groups if @user_groups
|
81
|
+
|
82
|
+
@user_groups = default_user_groups
|
83
|
+
@user_groups |= current_user.groups if current_user.respond_to? :groups
|
84
|
+
@user_groups |= ['registered'] unless current_user.new_record?
|
85
|
+
@user_groups
|
86
|
+
end
|
87
|
+
|
88
|
+
# Everyone is automatically a member of group 'public'
|
89
|
+
def default_user_groups
|
90
|
+
['public']
|
91
|
+
end
|
92
|
+
|
93
|
+
# read implies discover, so discover_groups is the union of read and discover groups
|
94
|
+
def discover_groups(id)
|
95
|
+
doc = permissions_doc(id)
|
96
|
+
return [] if doc.nil?
|
97
|
+
dg = read_groups(id) | (doc[self.class.discover_group_field] || [])
|
98
|
+
Rails.logger.debug("[CANCAN] discover_groups: #{dg.inspect}")
|
99
|
+
dg
|
100
|
+
end
|
101
|
+
|
102
|
+
# read implies discover, so discover_users is the union of read and discover users
|
103
|
+
def discover_users(id)
|
104
|
+
doc = permissions_doc(id)
|
105
|
+
return [] if doc.nil?
|
106
|
+
dp = read_users(id) | (doc[self.class.discover_user_field] || [])
|
107
|
+
Rails.logger.debug("[CANCAN] discover_users: #{dp.inspect}")
|
108
|
+
dp
|
109
|
+
end
|
110
|
+
|
111
|
+
def read_groups(id)
|
112
|
+
doc = permissions_doc(id)
|
113
|
+
return [] if doc.nil?
|
114
|
+
rg = Array(doc[self.class.read_group_field])
|
115
|
+
Rails.logger.debug("[CANCAN] read_groups: #{rg.inspect}")
|
116
|
+
rg
|
117
|
+
end
|
118
|
+
|
119
|
+
def read_users(id)
|
120
|
+
doc = permissions_doc(id)
|
121
|
+
return [] if doc.nil?
|
122
|
+
rp = Array(doc[self.class.read_user_field])
|
123
|
+
Rails.logger.debug("[CANCAN] read_users: #{rp.inspect}")
|
124
|
+
rp
|
125
|
+
end
|
126
|
+
|
127
|
+
module ClassMethods
|
128
|
+
|
129
|
+
def discover_group_field
|
130
|
+
Blacklight::AccessControls.config.discover_group_field
|
131
|
+
end
|
132
|
+
|
133
|
+
def discover_user_field
|
134
|
+
Blacklight::AccessControls.config.discover_user_field
|
135
|
+
end
|
136
|
+
|
137
|
+
def read_group_field
|
138
|
+
Blacklight::AccessControls.config.read_group_field
|
139
|
+
end
|
140
|
+
|
141
|
+
def read_user_field
|
142
|
+
Blacklight::AccessControls.config.read_user_field
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# This is behavior for the catalog controller.
|
2
|
+
|
3
|
+
module Blacklight
|
4
|
+
module AccessControls
|
5
|
+
module Catalog
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
# Override blacklight to produce a search_builder that has
|
9
|
+
# the current ability in context
|
10
|
+
def search_builder processor_chain = search_params_logic
|
11
|
+
super(true).tap { |builder| builder.current_ability = current_ability }
|
12
|
+
end
|
13
|
+
|
14
|
+
# Controller "before" filter for enforcing access controls
|
15
|
+
# on show actions.
|
16
|
+
# @param [Hash] opts (optional, not currently used)
|
17
|
+
def enforce_show_permissions(opts={})
|
18
|
+
permissions = current_ability.permissions_doc(params[:id])
|
19
|
+
unless can? :read, permissions
|
20
|
+
raise Blacklight::AccessControls::AccessDenied.new("You do not have sufficient access privileges to read this document, which has been marked private.", :read, params[:id])
|
21
|
+
end
|
22
|
+
permissions
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Blacklight
|
2
|
+
module AccessControls
|
3
|
+
class Config
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@user_model = default_user_model
|
7
|
+
@discover_group_field = default_discover_group_field
|
8
|
+
@discover_user_field = default_discover_user_field
|
9
|
+
@read_group_field = default_read_group_field
|
10
|
+
@read_user_field = default_read_user_field
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_accessor :user_model
|
14
|
+
attr_accessor :discover_group_field, :discover_user_field
|
15
|
+
attr_accessor :read_group_field, :read_user_field
|
16
|
+
|
17
|
+
def default_user_model
|
18
|
+
'User'
|
19
|
+
end
|
20
|
+
|
21
|
+
def default_discover_group_field
|
22
|
+
"discover_access_group_ssim"
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_discover_user_field
|
26
|
+
"discover_access_person_ssim"
|
27
|
+
end
|
28
|
+
|
29
|
+
def default_read_group_field
|
30
|
+
"read_access_group_ssim"
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_read_user_field
|
34
|
+
"read_access_person_ssim"
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|