-
Notifications
You must be signed in to change notification settings - Fork 78
/
permission_template_form.rb
35 lines (31 loc) · 1.51 KB
/
permission_template_form.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
module Sufia
module Forms
class PermissionTemplateForm
include HydraEditor::Form
self.model_class = PermissionTemplate
self.terms = []
delegate :access_grants, :access_grants_attributes=, :visibility, to: :model
# Visibility options for permission templates
def visibility_options
i18n_prefix = "sufia.admin.admin_sets.form_visibility.visibility"
# Note: Visibility 'varies' = '' implies no constraints
[[Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, I18n.t('.everyone', scope: i18n_prefix)],
['', I18n.t('.varies', scope: i18n_prefix)],
[Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED, I18n.t('.institution', scope: i18n_prefix)],
[Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, I18n.t('.restricted', scope: i18n_prefix)]]
end
def update(attributes)
manage_grants = attributes[:access_grants_attributes].select { |x| x[:access] == 'manage' }
grant_admin_set_access(manage_grants) if manage_grants.present?
model.update(attributes)
end
private
def grant_admin_set_access(manage_grants)
admin_set = AdminSet.find(model.admin_set_id)
admin_set.edit_users = manage_grants.select { |x| x[:agent_type] == 'user' }.map { |x| x[:agent_id] }
admin_set.edit_groups = manage_grants.select { |x| x[:agent_type] == 'group' }.map { |x| x[:agent_id] }
admin_set.save!
end
end
end
end