Class: PermissionsController

Inherits:
ApplicationController show all
Includes:
MediaShelf::ActiveFedoraHelper
Defined in:
vendor/plugins/hydra_repository/app/controllers/permissions_controller.rb

Instance Method Summary (collapse)

Methods included from MediaShelf::ActiveFedoraHelper

#load_af_instance_from_solr, #retrieve_af_model

Methods inherited from ApplicationController

#current_user, #default_html_head, #error, #extra_head_content, #javascript_includes, #stylesheet_links, #user_class

Methods included from HydraAccessControlsHelper

#editor?, #reader?, #test_permission

Instance Method Details

- (Object) create

Create a new permissions entry expects permission[“actor_id”], permission[“actor_type”] and permission[“access_level”] as params. ie. :permission=>PermissionsController.&&#8220;actor_id&&#8220;actor_id&#8221;=>&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&#8220;actor_type&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&#8220;actor_type&#8221;=>&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&#8220;actor_type&#8221;=>&#8220;person&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&#8220;actor_type&#8221;=>&#8220;person&#8221;,&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&#8220;actor_type&#8221;=>&#8220;person&#8221;,&#8220;access_level&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&#8220;actor_type&#8221;=>&#8220;person&#8221;,&#8220;access_level&#8221;=>&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&#8220;actor_type&#8221;=>&#8220;person&#8221;,&#8220;access_level&#8221;=>&#8220;read&&#8220;actor_id&#8221;=>&#8220;<em>person_id</em>&#8220;,&#8220;actor_type&#8221;=>&#8220;person&#8221;,&#8220;access_level&#8221;=>&#8220;read&#8221;



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'vendor/plugins/hydra_repository/app/controllers/permissions_controller.rb', line 36

def create
  pid = params[:asset_id]
  dsid = "rightsMetadata"
  # xml_content = Fedora::Repository.instance.fetch_custom(pid, "datastreams/#{dsid}/content")
  @document_fedora=ActiveFedora::Base.load_instance(params[:asset_id])
  xml_content = @document_fedora.datastreams_in_memory[dsid].content
  ds = Hydra::.from_xml(xml_content)
  ds.pid = pid
  ds.dsid = dsid
  @document_fedora.datastreams_in_memory[dsid] = ds
  
  access_actor_type = params["permission"]["actor_type"]
  actor_id = params["permission"]["actor_id"]
  access_level = params["permission"]["access_level"]

  # update the datastream's values
  result = ds.permissions({access_actor_type => actor_id}, access_level)
    
  # Replace the object's datastream with the new updated ds
  # !! Careful when re-working this.  If you init the object, replace the datastream, and call object.save, the datastream might get indexed twice!
  # FUTURE: ActiveFedora::Base will support this soon:
  # ActiveFedora::Base.replace_datastream("changeme:25","rightsMetadata", ds).
  # base_object.replace_datastream("rightsMetadata", ds)
  ds.pid = pid
  ds.dsid = dsid
  ds.save
  
  # Re-index the object
  Solrizer::Fedora::Solrizer.new.solrize(pid)
  
  render :partial=>"permissions/edit_person_permissions", :locals=>{:person_id=>actor_id}
end

- (Object) edit



22
23
24
25
26
27
28
29
30
31
32
# File 'vendor/plugins/hydra_repository/app/controllers/permissions_controller.rb', line 22

def edit
  @document_fedora=ActiveFedora::Base.load_instance(params[:asset_id])
  pid = params[:asset_id]
  dsid = "rightsMetadata"
  xml_content = @document_fedora.datastreams_in_memory[dsid].content
  ds = Hydra::.from_xml(xml_content)
  ds.pid = pid
  ds.dsid = dsid
  @document_fedora.datastreams_in_memory[dsid] = ds
  render :edit
end

- (Object) index



6
7
8
9
10
11
12
13
14
15
16
# File 'vendor/plugins/hydra_repository/app/controllers/permissions_controller.rb', line 6

def index
  @document_fedora=ActiveFedora::Base.load_instance(params[:asset_id])
  pid = params[:asset_id]
  dsid = "rightsMetadata"
  xml_content = @document_fedora.datastreams_in_memory[dsid].content
  ds = Hydra::.from_xml(xml_content)
  ds.pid = pid
  ds.dsid = dsid
  @document_fedora.datastreams_in_memory[dsid] = ds
  render :partial=>"permissions/index"
end

- (Object) new



18
19
20
# File 'vendor/plugins/hydra_repository/app/controllers/permissions_controller.rb', line 18

def new
  render :partial=>"permissions/new"
end

- (Object) update

Updates the permissions for all actors in a hash. Can specify as many groups and persons as you want ie. :permission => PermissionsController.&&#8220;group&&#8220;group&#8221;=>{&&#8220;group&#8221;=>{&#8220;group1&&#8220;group&#8221;=>{&#8220;group1&#8221;=>&&#8220;group&#8221;=>{&#8220;group1&#8221;=>&#8220;discover&&#8220;group&#8221;=>{&#8220;group1&#8221;=>&#8220;discover&#8221;,&&#8220;group&#8221;=>{&#8220;group1&#8221;=>&#8220;discover&#8221;,&#8220;group2&&#8220;group&#8221;=>{&#8220;group1&#8221;=>&#8220;discover&#8221;,&#8220;group2&#8221;=>&&#8220;group&#8221;=>{&#8220;group1&#8221;=>&#8220;discover&#8221;,&#8220;group2&#8221;=>&#8220;edit&&#8220;group&#8221;=>{&#8220;group1&#8221;=>&#8220;discover&#8221;,&#8220;group2&#8221;=>&#8220;edit&#8221;, PermissionsController.&&#8220;person&&#8220;person&#8221;=>{&&#8220;person&#8221;=>{&#8220;person1&&#8220;person&#8221;=>{&#8220;person1&#8221;=>&&#8220;person&#8221;=>{&#8220;person1&#8221;=>&#8220;read&&#8220;person&#8221;=>{&#8220;person1&#8221;=>&#8220;read&#8221;}}



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'vendor/plugins/hydra_repository/app/controllers/permissions_controller.rb', line 71

def update
  pid = params[:asset_id]
  dsid = "rightsMetadata"
  # xml_content = Fedora::Repository.instance.fetch_custom(pid, "datastreams/#{dsid}/content")
  @document_fedora=ActiveFedora::Base.load_instance(params[:asset_id])
  xml_content = @document_fedora.datastreams_in_memory[dsid].content
  ds = Hydra::.from_xml(xml_content)
  ds.pid = pid
  ds.dsid = dsid
  @document_fedora.datastreams_in_memory[dsid] = ds
  
  # update the datastream's values
  result = ds.update_permissions(params[:permission])
  
  # Replace the object's datastream with the new updated ds
  # !! Careful when re-working this.  If you init the object, replace the datastream, and call object.save, the datastream might get indexed twice!
  # FUTURE: ActiveFedora::Base will support this soon:
  # ActiveFedora::Base.replace_datastream("changeme:25","rightsMetadata", ds).
  # base_object.replace_datastream("rightsMetadata", ds)
  ds.pid = pid
  ds.dsid = dsid
  ds.save
  
  # Re-index the object
  Solrizer::Fedora::Solrizer.new.solrize(pid)
  
  # This should be replaced ...
  if params[:permission].has_key?(:group)
    access_actor_type = "group"
  else
    access_actor_type = "person"
  end
  actor_id = params["permission"][access_actor_type].first[0]
  
  render :partial=>"permissions/edit_person_permissions", :locals=>{:person_id=>actor_id}
end