Module: Cul::Hydra::Solrizer::AccessControlMetadataFields
Constant Summary
collapse
- XACML_NS =
{'xacml'=>'urn:oasis:names:tc:xacml:3.0:core:schema:wd-17'}
- FUNCTION_EMBARGO =
"urn:oasis:names:tc:xacml:1.0:function:date-greater-than-or-equal".freeze
- FUNCTION_ONE_STRING_MATCH =
"urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of".freeze
- FUNCTION_ONE_URI_MATCH =
"urn:oasis:names:tc:xacml:1.0:function:anyURI-at-least-one-member-of".freeze
- TYPE_DATE =
"http://www.w3.org/2001/XMLSchema#date".freeze
- TYPE_STRING =
"http://www.w3.org/2001/XMLSchema#string".freeze
- TYPE_URI =
"http://www.w3.org/2001/XMLSchema#anyURI".freeze
- ATTRIBUTE_AFFILIATION =
"http://www.ja-sig.org/products/cas/affiliation".freeze
AccessLevels::ACCESS_LEVEL_AFFILIATION, AccessLevels::ACCESS_LEVEL_CLASSROOM, AccessLevels::ACCESS_LEVEL_CLOSED, AccessLevels::ACCESS_LEVEL_EMBARGO, AccessLevels::ACCESS_LEVEL_ONSITE, AccessLevels::ACCESS_LEVEL_PUBLIC, AccessLevels::ACCESS_LEVEL_REQUEST
Instance Method Summary
collapse
Instance Method Details
#access_levels ⇒ Object
34
35
36
|
# File 'lib/cul_hydra/solrizer/access_control_metadata_fields.rb', line 34
def access_levels
policy&.xpath('./xacml:Rule/xacml:Description', XACML_NS).map(&:text)
end
|
#permissions ⇒ Object
42
43
44
|
# File 'lib/cul_hydra/solrizer/access_control_metadata_fields.rb', line 42
def permissions
policy&.xpath('./xacml:Rule[@Effect=\'Permit\']/xacml:Condition', XACML_NS)
end
|
#permissions_indicated? ⇒ Boolean
38
39
40
|
# File 'lib/cul_hydra/solrizer/access_control_metadata_fields.rb', line 38
def permissions_indicated?
permissions&.length > 0
end
|
#permit_affiliations ⇒ Object
46
47
48
49
50
51
52
53
54
|
# File 'lib/cul_hydra/solrizer/access_control_metadata_fields.rb', line 46
def permit_affiliations
permissions&.map do |condition|
if condition.xpath("../xacml:Description", XACML_NS).text.eql?(ACCESS_LEVEL_AFFILIATION)
if condition['FunctionId'].eql?(FUNCTION_ONE_STRING_MATCH)
condition.xpath(".//xacml:AttributeValue[@DataType='#{TYPE_STRING}']", XACML_NS).text
end
end
end.compact
end
|
#permit_after_date ⇒ Object
66
67
68
69
70
71
72
73
74
|
# File 'lib/cul_hydra/solrizer/access_control_metadata_fields.rb', line 66
def permit_after_date
permissions&.map do |condition|
if condition.xpath("../xacml:Description", XACML_NS).text.eql?(ACCESS_LEVEL_EMBARGO)
if condition['FunctionId'].eql?(FUNCTION_EMBARGO)
condition.xpath("./xacml:AttributeValue[@DataType='#{TYPE_DATE}']", XACML_NS).text
end
end
end.compact.first
end
|
#permit_locations ⇒ Object
56
57
58
59
60
61
62
63
64
|
# File 'lib/cul_hydra/solrizer/access_control_metadata_fields.rb', line 56
def permit_locations
permissions&.map do |condition|
if condition.xpath("../xacml:Description", XACML_NS).text.eql?(ACCESS_LEVEL_ONSITE)
if condition['FunctionId'].eql?(FUNCTION_ONE_URI_MATCH)
condition.xpath(".//xacml:AttributeValue[@DataType='#{TYPE_URI}']", XACML_NS).text
end
end
end.compact
end
|
#policy ⇒ Object
30
31
32
|
# File 'lib/cul_hydra/solrizer/access_control_metadata_fields.rb', line 30
def policy
ng_xml.xpath('/xacml:Policy', XACML_NS).first
end
|
#to_solr(solr_doc = {}) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/cul_hydra/solrizer/access_control_metadata_fields.rb', line 18
def to_solr(solr_doc={})
solr_doc = (defined? super) ? super : solr_doc
return solr_doc if policy.nil? solr_doc['access_control_levels_ssim'] = access_levels
solr_doc['access_control_permissions_bsi'] = permissions_indicated?
solr_doc['access_control_embargo_dtsi'] = permit_after_date
solr_doc['access_control_affiliations_ssim'] = permit_affiliations
solr_doc['access_control_locations_ssim'] = permit_locations
solr_doc
end
|