hydra-head 4.0.3 → 4.1.0
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.
- data/.gitignore +1 -0
- data/HISTORY.textile +17 -2
- data/app/assets/stylesheets/hydra/html_refactor.css +3 -30
- data/app/assets/stylesheets/hydra/styles.css +6 -64
- data/app/controllers/downloads_controller.rb +1 -1
- data/app/controllers/hydra/assets_controller.rb +10 -1
- data/app/controllers/hydra/contributors_controller.rb +15 -1
- data/app/controllers/hydra/file_assets_controller.rb +1 -1
- data/app/controllers/hydra/permissions_controller.rb +14 -0
- data/app/helpers/hydra/article_metadata_helper_behavior.rb +14 -1
- data/app/helpers/hydra/downloads_helper_behavior.rb +6 -0
- data/app/helpers/hydra/facets_helper_behavior.rb +7 -0
- data/app/helpers/hydra/generic_content_objects_helper_behavior.rb +6 -0
- data/app/helpers/hydra/hydra_assets_helper_behavior.rb +10 -0
- data/app/helpers/hydra/hydra_fedora_metadata_helper_behavior.rb +31 -0
- data/app/helpers/hydra/hydra_helper_behavior.rb +18 -7
- data/app/helpers/hydra/hydra_uploader_helper_behavior.rb +5 -0
- data/app/helpers/hydra/inline_editable_metadata_helper_behavior.rb +6 -0
- data/app/helpers/hydra/javascript_includes_helper_behavior.rb +7 -0
- data/app/helpers/hydra/personalization_helper_behavior.rb +5 -0
- data/app/helpers/hydra/release_process_helper_behavior.rb +5 -0
- data/app/models/generic_content.rb +3 -0
- data/app/models/generic_image.rb +3 -0
- data/app/models/superuser.rb +4 -2
- data/app/models/user_attribute.rb +7 -2
- data/app/views/_add_assets_links.html.erb +4 -4
- data/app/views/catalog/_index_partials/_default.html.erb +2 -2
- data/app/views/catalog/show.html.erb +1 -1
- data/app/views/generic_contents/_index.html.erb +2 -2
- data/app/views/generic_images/_edit.html.erb +1 -1
- data/app/views/generic_images/_index.html.erb +2 -2
- data/app/views/hydra/file_assets/_file_assets_form.html.erb +1 -1
- data/app/views/hydra/file_assets/_index.html.erb +2 -2
- data/app/views/hydra/file_assets/_result.html.erb +1 -1
- data/app/views/layouts/hydra-head.html.erb +4 -1
- data/app/views/mods_assets/_index_list.html.erb +1 -1
- data/app/views/mods_assets/_index_table.html.erb +2 -2
- data/app/views/mods_assets/_show.html.erb +1 -1
- data/app/views/mods_assets/_show_file_assets.html.erb +1 -1
- data/config/jetty.yml +1 -1
- data/config/locales/hydra.en.yml +7 -0
- data/config/solr.yml +1 -1
- data/config/solr_mappings.yml +2 -2
- data/hydra-head.gemspec +5 -4
- data/lib/generators/hydra/head_generator.rb +6 -5
- data/lib/generators/hydra/templates/config/fedora.yml +1 -1
- data/lib/generators/hydra/templates/config/solr.yml +1 -1
- data/lib/hydra-head/version.rb +1 -1
- data/lib/hydra.rb +13 -11
- data/lib/hydra/assets.rb +5 -135
- data/lib/hydra/catalog.rb +6 -44
- data/lib/hydra/controller.rb +10 -27
- data/lib/hydra/controller/assets_controller_behavior.rb +142 -0
- data/lib/hydra/controller/catalog_controller_behavior.rb +56 -0
- data/lib/hydra/controller/controller_behavior.rb +59 -0
- data/lib/hydra/controller/file_assets_behavior.rb +142 -0
- data/lib/hydra/controller/repository_controller_behavior.rb +119 -0
- data/lib/hydra/controller/upload_behavior.rb +139 -0
- data/lib/hydra/file_assets.rb +3 -138
- data/lib/hydra/file_assets_helper.rb +6 -133
- data/lib/hydra/generic_content.rb +15 -0
- data/lib/hydra/generic_image.rb +10 -0
- data/lib/hydra/global_configurable.rb +46 -0
- data/lib/hydra/model_methods.rb +3 -3
- data/lib/hydra/model_mixins.rb +1 -1
- data/lib/hydra/model_mixins/solr_document_extension.rb +24 -0
- data/lib/hydra/repository_controller.rb +4 -95
- data/lib/hydra/ui/controller.rb +1 -2
- data/lib/hydra/user.rb +13 -1
- data/lib/railties/hydra-fixtures.rake +1 -1
- data/tasks/hydra-head.rake +2 -0
- data/{app/models → test_support/etc}/common_metadata_asset.rb +1 -2
- data/test_support/features/mods_asset_show.feature +1 -1
- data/test_support/features/support/env.rb +2 -0
- data/test_support/features/support/paths.rb +2 -0
- data/test_support/spec/controllers/catalog_controller_spec.rb +8 -0
- data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +10 -1
- data/test_support/spec/controllers/catalog_valid_html_spec.rb +8 -0
- data/test_support/spec/controllers/contributors_controller_spec.rb +10 -0
- data/test_support/spec/controllers/file_assets_controller_spec.rb +15 -3
- data/test_support/spec/controllers/hydra-assets_controller_spec.rb +11 -1
- data/test_support/spec/controllers/hydra_controller_spec.rb +15 -4
- data/test_support/spec/controllers/permissions_controller_spec.rb +8 -0
- data/test_support/spec/helpers/access_controls_enforcement_spec.rb +1 -2
- data/test_support/spec/helpers/file_assets_helper_spec.rb +1 -1
- data/test_support/spec/helpers/generic_content_objects_helper_spec.rb +10 -1
- data/test_support/spec/helpers/hydra-repository_controller_spec.rb +1 -1
- data/test_support/spec/helpers/hydra_assets_helper_spec.rb +8 -0
- data/test_support/spec/helpers/hydra_fedora_metadata_helper_spec.rb +11 -0
- data/test_support/spec/helpers/hydra_helper_spec.rb +18 -0
- data/test_support/spec/helpers/hydra_model_methods_spec.rb +0 -12
- data/test_support/spec/helpers/hydra_uploader_helper_spec.rb +8 -0
- data/test_support/spec/helpers/javascript_includes_helper_spec.rb +9 -1
- data/test_support/spec/lib/catalog_spec.rb +10 -3
- data/test_support/spec/lib/global_configurable_spec.rb +98 -0
- data/test_support/spec/lib/model_methods_spec.rb +29 -0
- data/test_support/spec/models/generic_content_spec.rb +11 -0
- data/test_support/spec/models/generic_image_spec.rb +15 -0
- data/test_support/spec/models/user_spec.rb +25 -0
- metadata +39 -37
- data/app/models/ability.rb +0 -5
- data/app/models/hydra/ability.rb +0 -137
- data/app/models/hydra/datastream/common_mods_index_methods.rb +0 -47
- data/app/models/hydra/datastream/mods_article.rb +0 -530
- data/app/models/hydra/datastream/mods_dataset.rb +0 -173
- data/app/models/hydra/datastream/mods_generic_content.rb +0 -498
- data/app/models/hydra/datastream/mods_image.rb +0 -497
- data/app/models/hydra/datastream/rights_metadata.rb +0 -191
- data/app/models/hydra/role_mapper_behavior.rb +0 -33
- data/app/models/role_mapper.rb +0 -6
- data/lib/hydra/access_controls_enforcement.rb +0 -237
- data/lib/hydra/access_controls_evaluation.rb +0 -38
- data/lib/hydra/common_mods_index_methods.rb +0 -46
- data/lib/hydra/model_mixins/mods_object.rb +0 -17
- data/lib/hydra/model_mixins/rights_metadata.rb +0 -357
- data/lib/hydra/mods_article.rb +0 -535
- data/lib/hydra/mods_dataset.rb +0 -177
- data/lib/hydra/mods_generic_content.rb +0 -500
- data/lib/hydra/mods_image.rb +0 -500
- data/lib/uva/mods_index_methods.rb +0 -30
- data/test_support/spec/lib/common_mods_index_methods_spec.rb +0 -26
- data/test_support/spec/models/ability_spec.rb +0 -40
- data/test_support/spec/models/hydra_rights_metadata_spec.rb +0 -175
- data/test_support/spec/models/role_mapper_spec.rb +0 -22
- data/test_support/spec/unit/rights_metadata_spec.rb +0 -80
@@ -1,38 +0,0 @@
|
|
1
|
-
# will move to lib/hydra/access_control folder/namespace in release 5.x
|
2
|
-
# Provides methods for determining permissions
|
3
|
-
# If you include this into a Controller, it will also make a number of these methods available as view helpers.
|
4
|
-
module Hydra::AccessControlsEvaluation
|
5
|
-
|
6
|
-
def self.included(klass)
|
7
|
-
if klass.respond_to?(:helper_method)
|
8
|
-
klass.helper_method(:editor?)
|
9
|
-
klass.helper_method(:reader?)
|
10
|
-
klass.helper_method(:test_permission?)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
# Test the current user's permissions. This method is used by the editor? and reader? methods
|
15
|
-
# @param [Symbol] permission_type valid options: :edit, :read
|
16
|
-
# This is available as a view helper method as well as within your controllers.
|
17
|
-
# @example
|
18
|
-
# test_permission(:edit)
|
19
|
-
def test_permission(permission_type)
|
20
|
-
ActiveSupport::Deprecation.warn("test_permission has been deprecated. Use can? instead")
|
21
|
-
can? permission_type, @permissions_solr_document
|
22
|
-
end
|
23
|
-
|
24
|
-
# Test whether the the current user has edit permissions.
|
25
|
-
# This is available as a view helper method as well as within your controllers.
|
26
|
-
def editor?
|
27
|
-
logger.warn("editor? has been deprecated. Use can? instead")
|
28
|
-
can? :edit, @permissions_solr_document
|
29
|
-
end
|
30
|
-
|
31
|
-
# Test whether the the current user has read permissions.
|
32
|
-
# This is available as a view helper method as well as within your controllers.
|
33
|
-
def reader?
|
34
|
-
logger.warn("reader? has been deprecated. Use can? instead")
|
35
|
-
can? :read, @permissions_solr_document
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# Provides some helper methods for indexing compound or non-standard facets
|
2
|
-
#
|
3
|
-
# == Methods
|
4
|
-
#
|
5
|
-
# extract_person_full_names
|
6
|
-
# This method returns a Hash of person_full_name_facet values which combine Lastname, Firstname
|
7
|
-
# extract_person_organizations
|
8
|
-
# This method returns a Hash of person_full_name_facet values which extract the persons affiliation and puts it in an mods_organization_facet
|
9
|
-
# will be removed in release 5.x
|
10
|
-
module Hydra::CommonModsIndexMethods
|
11
|
-
|
12
|
-
def self.included(base)
|
13
|
-
ActiveSupport::Deprecation.warn("Hydra::CommonModsIndexMethods has been deprecated. Use Hydra::Datastream::CommonModsIndexMethods instead")
|
14
|
-
end
|
15
|
-
|
16
|
-
# Extracts the first and last names of persons and creates Solr::Field objects with for person_full_name_facet
|
17
|
-
#
|
18
|
-
# == Returns:
|
19
|
-
# An array of Solr::Field objects
|
20
|
-
#
|
21
|
-
def extract_person_full_names
|
22
|
-
names = {}
|
23
|
-
self.find_by_terms(:person).each do |person|
|
24
|
-
name_parts = person.children.inject({}) do |hash,child|
|
25
|
-
hash[child.get_attribute(:type)] = child.text if ["family","given"].include? child.get_attribute(:type)
|
26
|
-
hash
|
27
|
-
end
|
28
|
-
::Solrizer::Extractor.insert_solr_field_value(names, "person_full_name_facet", [name_parts["family"], name_parts["given"]].join(", ") ) if name_parts.keys.sort == ["family","given"]
|
29
|
-
names
|
30
|
-
end
|
31
|
-
return names
|
32
|
-
end
|
33
|
-
|
34
|
-
# Extracts the affiliations of persons and creates Solr::Field objects for them
|
35
|
-
#
|
36
|
-
# == Returns:
|
37
|
-
# An array of Solr::Field objects
|
38
|
-
#
|
39
|
-
def extract_person_organizations
|
40
|
-
orgs = {}
|
41
|
-
self.find_by_terms(:person,:affiliation).each do |org|
|
42
|
-
::Solrizer::Extractor.insert_solr_field_value(orgs, "mods_organization_facet", org.text)
|
43
|
-
end
|
44
|
-
return orgs
|
45
|
-
end
|
46
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# Include this into models to specify that the descMetadata datastream contains basic MODS metadata
|
2
|
-
#
|
3
|
-
# Explicitly declares:
|
4
|
-
# descMetadata datastream using Hydra::Datastream::ModsArticle Terminology
|
5
|
-
#
|
6
|
-
# will move to lib/hydra/model/mods_object_behavior in release 5.x
|
7
|
-
module Hydra::ModelMixins::ModsObject
|
8
|
-
|
9
|
-
def self.included(klazz)
|
10
|
-
# Uses the Hydra MODS Basic profile for tracking descriptive metadata
|
11
|
-
klazz.has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsArticle
|
12
|
-
|
13
|
-
# Ensure that objects assert the modsObject cModel
|
14
|
-
# klazz.relationships << :has_model => "info:fedora/hydra-cModel:modsObject"
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
@@ -1,357 +0,0 @@
|
|
1
|
-
module Hydra
|
2
|
-
module ModelMixins
|
3
|
-
module RightsMetadata
|
4
|
-
|
5
|
-
|
6
|
-
## Updates those permissions that are provided to it. Does not replace any permissions unless they are provided
|
7
|
-
# @example
|
8
|
-
# obj.permissions= [{:name=>"group1", :access=>"discover", :type=>'group'},
|
9
|
-
# {:name=>"group2", :access=>"discover", :type=>'group'}]
|
10
|
-
def permissions=(params)
|
11
|
-
perm_hash = {'person' => rightsMetadata.individuals, 'group'=> rightsMetadata.groups}
|
12
|
-
|
13
|
-
params.each do |row|
|
14
|
-
if row[:type] == 'user'
|
15
|
-
perm_hash['person'][row[:name]] = row[:access]
|
16
|
-
else
|
17
|
-
perm_hash['group'][row[:name]] = row[:access]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
rightsMetadata.update_permissions(perm_hash)
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
## Returns a list with all the permissions on the object.
|
26
|
-
# @example
|
27
|
-
# [{:name=>"group1", :access=>"discover", :type=>'group'},
|
28
|
-
# {:name=>"group2", :access=>"discover", :type=>'group'},
|
29
|
-
# {:name=>"user2", :access=>"read", :type=>'user'},
|
30
|
-
# {:name=>"user1", :access=>"edit", :type=>'user'},
|
31
|
-
# {:name=>"user3", :access=>"read", :type=>'user'}]
|
32
|
-
def permissions
|
33
|
-
(rightsMetadata.groups.map {|x| {:type=>'group', :access=>x[1], :name=>x[0] }} +
|
34
|
-
rightsMetadata.individuals.map {|x| {:type=>'user', :access=>x[1], :name=>x[0]}})
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
# Return a list of groups that have discover permission
|
39
|
-
def discover_groups
|
40
|
-
rightsMetadata.groups.map {|k, v| k if v == 'discover'}.compact
|
41
|
-
end
|
42
|
-
|
43
|
-
# Grant discover permissions to the groups specified. Revokes discover permission for all other groups.
|
44
|
-
# @param[Array] groups a list of group names
|
45
|
-
# @example
|
46
|
-
# r.discover_groups= ['one', 'two', 'three']
|
47
|
-
# r.discover_groups
|
48
|
-
# => ['one', 'two', 'three']
|
49
|
-
#
|
50
|
-
def discover_groups=(groups)
|
51
|
-
set_discover_groups(groups, discover_groups)
|
52
|
-
end
|
53
|
-
|
54
|
-
# Grant discover permissions to the groups specified. Revokes discover permission for all other groups.
|
55
|
-
# @param[String] groups a list of group names
|
56
|
-
# @example
|
57
|
-
# r.discover_groups_string= 'one, two, three'
|
58
|
-
# r.discover_groups
|
59
|
-
# => ['one', 'two', 'three']
|
60
|
-
#
|
61
|
-
def discover_groups_string=(groups)
|
62
|
-
self.discover_groups=groups.split(/[\s,]+/)
|
63
|
-
end
|
64
|
-
|
65
|
-
# Display the groups a comma delimeted string
|
66
|
-
def discover_groups_string
|
67
|
-
self.discover_groups.join(', ')
|
68
|
-
end
|
69
|
-
|
70
|
-
# Grant discover permissions to the groups specified. Revokes discover permission for
|
71
|
-
# any of the eligible_groups that are not in groups.
|
72
|
-
# This may be used when different users are responsible for setting different
|
73
|
-
# groups. Supply the groups the current user is responsible for as the
|
74
|
-
# 'eligible_groups'
|
75
|
-
# @param[Array] groups a list of groups
|
76
|
-
# @param[Array] eligible_groups the groups that are eligible to have their discover permssion revoked.
|
77
|
-
# @example
|
78
|
-
# r.discover_groups = ['one', 'two', 'three']
|
79
|
-
# r.discover_groups
|
80
|
-
# => ['one', 'two', 'three']
|
81
|
-
# r.set_discover_groups(['one'], ['three'])
|
82
|
-
# r.discover_groups
|
83
|
-
# => ['one', 'two'] ## 'two' was not eligible to be removed
|
84
|
-
#
|
85
|
-
def set_discover_groups(groups, eligible_groups)
|
86
|
-
set_entities(:discover, :group, groups, eligible_groups)
|
87
|
-
end
|
88
|
-
|
89
|
-
def discover_users
|
90
|
-
rightsMetadata.individuals.map {|k, v| k if v == 'discover'}.compact
|
91
|
-
end
|
92
|
-
|
93
|
-
# Grant discover permissions to the users specified. Revokes discover permission for all other users.
|
94
|
-
# @param[Array] users a list of usernames
|
95
|
-
# @example
|
96
|
-
# r.discover_users= ['one', 'two', 'three']
|
97
|
-
# r.discover_users
|
98
|
-
# => ['one', 'two', 'three']
|
99
|
-
#
|
100
|
-
def discover_users=(users)
|
101
|
-
set_discover_users(users, discover_users)
|
102
|
-
end
|
103
|
-
|
104
|
-
# Grant discover permissions to the groups specified. Revokes discover permission for all other users.
|
105
|
-
# @param[String] users a list of usernames
|
106
|
-
# @example
|
107
|
-
# r.discover_users_string= 'one, two, three'
|
108
|
-
# r.discover_users
|
109
|
-
# => ['one', 'two', 'three']
|
110
|
-
#
|
111
|
-
def discover_users_string=(users)
|
112
|
-
self.discover_users=users.split(/[\s,]+/)
|
113
|
-
end
|
114
|
-
|
115
|
-
# Display the users as a comma delimeted string
|
116
|
-
def discover_users_string
|
117
|
-
self.discover_users.join(', ')
|
118
|
-
end
|
119
|
-
|
120
|
-
# Grant discover permissions to the users specified. Revokes discover permission for
|
121
|
-
# any of the eligible_users that are not in users.
|
122
|
-
# This may be used when different users are responsible for setting different
|
123
|
-
# users. Supply the users the current user is responsible for as the
|
124
|
-
# 'eligible_users'
|
125
|
-
# @param[Array] users a list of users
|
126
|
-
# @param[Array] eligible_users the users that are eligible to have their discover permssion revoked.
|
127
|
-
# @example
|
128
|
-
# r.discover_users = ['one', 'two', 'three']
|
129
|
-
# r.discover_users
|
130
|
-
# => ['one', 'two', 'three']
|
131
|
-
# r.set_discover_users(['one'], ['three'])
|
132
|
-
# r.discover_users
|
133
|
-
# => ['one', 'two'] ## 'two' was not eligible to be removed
|
134
|
-
#
|
135
|
-
def set_discover_users(users, eligible_users)
|
136
|
-
set_entities(:discover, :person, users, eligible_users)
|
137
|
-
end
|
138
|
-
|
139
|
-
# Return a list of groups that have discover permission
|
140
|
-
def read_groups
|
141
|
-
rightsMetadata.groups.map {|k, v| k if v == 'read'}.compact
|
142
|
-
end
|
143
|
-
|
144
|
-
# Grant read permissions to the groups specified. Revokes read permission for all other groups.
|
145
|
-
# @param[Array] groups a list of group names
|
146
|
-
# @example
|
147
|
-
# r.read_groups= ['one', 'two', 'three']
|
148
|
-
# r.read_groups
|
149
|
-
# => ['one', 'two', 'three']
|
150
|
-
#
|
151
|
-
def read_groups=(groups)
|
152
|
-
set_read_groups(groups, read_groups)
|
153
|
-
end
|
154
|
-
|
155
|
-
# Grant read permissions to the groups specified. Revokes read permission for all other groups.
|
156
|
-
# @param[String] groups a list of group names
|
157
|
-
# @example
|
158
|
-
# r.read_groups_string= 'one, two, three'
|
159
|
-
# r.read_groups
|
160
|
-
# => ['one', 'two', 'three']
|
161
|
-
#
|
162
|
-
def read_groups_string=(groups)
|
163
|
-
self.read_groups=groups.split(/[\s,]+/)
|
164
|
-
end
|
165
|
-
|
166
|
-
# Display the groups a comma delimeted string
|
167
|
-
def read_groups_string
|
168
|
-
self.read_groups.join(', ')
|
169
|
-
end
|
170
|
-
|
171
|
-
# Grant read permissions to the groups specified. Revokes read permission for
|
172
|
-
# any of the eligible_groups that are not in groups.
|
173
|
-
# This may be used when different users are responsible for setting different
|
174
|
-
# groups. Supply the groups the current user is responsible for as the
|
175
|
-
# 'eligible_groups'
|
176
|
-
# @param[Array] groups a list of groups
|
177
|
-
# @param[Array] eligible_groups the groups that are eligible to have their read permssion revoked.
|
178
|
-
# @example
|
179
|
-
# r.read_groups = ['one', 'two', 'three']
|
180
|
-
# r.read_groups
|
181
|
-
# => ['one', 'two', 'three']
|
182
|
-
# r.set_read_groups(['one'], ['three'])
|
183
|
-
# r.read_groups
|
184
|
-
# => ['one', 'two'] ## 'two' was not eligible to be removed
|
185
|
-
#
|
186
|
-
def set_read_groups(groups, eligible_groups)
|
187
|
-
set_entities(:read, :group, groups, eligible_groups)
|
188
|
-
end
|
189
|
-
|
190
|
-
def read_users
|
191
|
-
rightsMetadata.individuals.map {|k, v| k if v == 'read'}.compact
|
192
|
-
end
|
193
|
-
|
194
|
-
# Grant read permissions to the users specified. Revokes read permission for all other users.
|
195
|
-
# @param[Array] users a list of usernames
|
196
|
-
# @example
|
197
|
-
# r.read_users= ['one', 'two', 'three']
|
198
|
-
# r.read_users
|
199
|
-
# => ['one', 'two', 'three']
|
200
|
-
#
|
201
|
-
def read_users=(users)
|
202
|
-
set_read_users(users, read_users)
|
203
|
-
end
|
204
|
-
|
205
|
-
# Grant read permissions to the groups specified. Revokes read permission for all other users.
|
206
|
-
# @param[String] users a list of usernames
|
207
|
-
# @example
|
208
|
-
# r.read_users_string= 'one, two, three'
|
209
|
-
# r.read_users
|
210
|
-
# => ['one', 'two', 'three']
|
211
|
-
#
|
212
|
-
def read_users_string=(users)
|
213
|
-
self.read_users=users.split(/[\s,]+/)
|
214
|
-
end
|
215
|
-
|
216
|
-
# Display the users as a comma delimeted string
|
217
|
-
def read_users_string
|
218
|
-
self.read_users.join(', ')
|
219
|
-
end
|
220
|
-
|
221
|
-
# Grant read permissions to the users specified. Revokes read permission for
|
222
|
-
# any of the eligible_users that are not in users.
|
223
|
-
# This may be used when different users are responsible for setting different
|
224
|
-
# users. Supply the users the current user is responsible for as the
|
225
|
-
# 'eligible_users'
|
226
|
-
# @param[Array] users a list of users
|
227
|
-
# @param[Array] eligible_users the users that are eligible to have their read permssion revoked.
|
228
|
-
# @example
|
229
|
-
# r.read_users = ['one', 'two', 'three']
|
230
|
-
# r.read_users
|
231
|
-
# => ['one', 'two', 'three']
|
232
|
-
# r.set_read_users(['one'], ['three'])
|
233
|
-
# r.read_users
|
234
|
-
# => ['one', 'two'] ## 'two' was not eligible to be removed
|
235
|
-
#
|
236
|
-
def set_read_users(users, eligible_users)
|
237
|
-
set_entities(:read, :person, users, eligible_users)
|
238
|
-
end
|
239
|
-
|
240
|
-
|
241
|
-
# Return a list of groups that have edit permission
|
242
|
-
def edit_groups
|
243
|
-
rightsMetadata.groups.map {|k, v| k if v == 'edit'}.compact
|
244
|
-
end
|
245
|
-
|
246
|
-
# Grant edit permissions to the groups specified. Revokes edit permission for all other groups.
|
247
|
-
# @param[Array] groups a list of group names
|
248
|
-
# @example
|
249
|
-
# r.edit_groups= ['one', 'two', 'three']
|
250
|
-
# r.edit_groups
|
251
|
-
# => ['one', 'two', 'three']
|
252
|
-
#
|
253
|
-
def edit_groups=(groups)
|
254
|
-
set_edit_groups(groups, edit_groups)
|
255
|
-
end
|
256
|
-
|
257
|
-
# Grant edit permissions to the groups specified. Revokes edit permission for all other groups.
|
258
|
-
# @param[String] groups a list of group names
|
259
|
-
# @example
|
260
|
-
# r.edit_groups_string= 'one, two, three'
|
261
|
-
# r.edit_groups
|
262
|
-
# => ['one', 'two', 'three']
|
263
|
-
#
|
264
|
-
def edit_groups_string=(groups)
|
265
|
-
self.edit_groups=groups.split(/[\s,]+/)
|
266
|
-
end
|
267
|
-
|
268
|
-
# Display the groups a comma delimeted string
|
269
|
-
def edit_groups_string
|
270
|
-
self.edit_groups.join(', ')
|
271
|
-
end
|
272
|
-
|
273
|
-
# Grant edit permissions to the groups specified. Revokes edit permission for
|
274
|
-
# any of the eligible_groups that are not in groups.
|
275
|
-
# This may be used when different users are responsible for setting different
|
276
|
-
# groups. Supply the groups the current user is responsible for as the
|
277
|
-
# 'eligible_groups'
|
278
|
-
# @param[Array] groups a list of groups
|
279
|
-
# @param[Array] eligible_groups the groups that are eligible to have their edit permssion revoked.
|
280
|
-
# @example
|
281
|
-
# r.edit_groups = ['one', 'two', 'three']
|
282
|
-
# r.edit_groups
|
283
|
-
# => ['one', 'two', 'three']
|
284
|
-
# r.set_edit_groups(['one'], ['three'])
|
285
|
-
# r.edit_groups
|
286
|
-
# => ['one', 'two'] ## 'two' was not eligible to be removed
|
287
|
-
#
|
288
|
-
def set_edit_groups(groups, eligible_groups)
|
289
|
-
set_entities(:edit, :group, groups, eligible_groups)
|
290
|
-
end
|
291
|
-
|
292
|
-
def edit_users
|
293
|
-
rightsMetadata.individuals.map {|k, v| k if v == 'edit'}.compact
|
294
|
-
end
|
295
|
-
|
296
|
-
# Grant edit permissions to the groups specified. Revokes edit permission for all other groups.
|
297
|
-
# @param[Array] users a list of usernames
|
298
|
-
# @example
|
299
|
-
# r.edit_users= ['one', 'two', 'three']
|
300
|
-
# r.edit_users
|
301
|
-
# => ['one', 'two', 'three']
|
302
|
-
#
|
303
|
-
def edit_users=(users)
|
304
|
-
set_edit_users(users, edit_users)
|
305
|
-
end
|
306
|
-
|
307
|
-
# Grant edit permissions to the users specified. Revokes edit permission for
|
308
|
-
# any of the eligible_users that are not in users.
|
309
|
-
# This may be used when different users are responsible for setting different
|
310
|
-
# users. Supply the users the current user is responsible for as the
|
311
|
-
# 'eligible_users'
|
312
|
-
# @param[Array] users a list of users
|
313
|
-
# @param[Array] eligible_users the users that are eligible to have their edit permssion revoked.
|
314
|
-
# @example
|
315
|
-
# r.edit_users = ['one', 'two', 'three']
|
316
|
-
# r.edit_users
|
317
|
-
# => ['one', 'two', 'three']
|
318
|
-
# r.set_edit_users(['one'], ['three'])
|
319
|
-
# r.edit_users
|
320
|
-
# => ['one', 'two'] ## 'two' was not eligible to be removed
|
321
|
-
#
|
322
|
-
def set_edit_users(users, eligible_users)
|
323
|
-
set_entities(:edit, :person, users, eligible_users)
|
324
|
-
end
|
325
|
-
|
326
|
-
|
327
|
-
private
|
328
|
-
|
329
|
-
# @param permission either :discover, :read or :edit
|
330
|
-
# @param type either :person or :group
|
331
|
-
# @param values Values to set
|
332
|
-
# @param changeable Values we are allowed to change
|
333
|
-
def set_entities(permission, type, values, changeable)
|
334
|
-
g = preserved(type, permission)
|
335
|
-
(changeable - values).each do |entity|
|
336
|
-
#Strip permissions from users not provided
|
337
|
-
g[entity] = 'none'
|
338
|
-
end
|
339
|
-
values.each { |name| g[name] = permission.to_s}
|
340
|
-
rightsMetadata.update_permissions(type.to_s=>g)
|
341
|
-
end
|
342
|
-
|
343
|
-
## Get those permissions we don't want to change
|
344
|
-
def preserved(type, permission)
|
345
|
-
case permission
|
346
|
-
when :edit
|
347
|
-
g = {}
|
348
|
-
when :read
|
349
|
-
Hash[rightsMetadata.quick_search_by_type(type).select {|k, v| v == 'edit'}]
|
350
|
-
when :discover
|
351
|
-
Hash[rightsMetadata.quick_search_by_type(type).select {|k, v| v == 'discover'}]
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
end
|
356
|
-
end
|
357
|
-
end
|