decidim-admin 0.11.2 → 0.12.0.pre

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim-admin might be problematic. Click here for more details.

Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/admin/application.js.es6 +5 -1
  3. data/app/assets/javascripts/decidim/admin/bundle.js +47 -0
  4. data/app/assets/javascripts/decidim/admin/bundle.js.map +1 -0
  5. data/app/assets/javascripts/decidim/admin/component_permissions.js.es6 +13 -0
  6. data/app/assets/javascripts/decidim/admin/managed_users.js.es6 +2 -1
  7. data/app/assets/javascripts/decidim/admin/subform_toggler.component.js.es6 +14 -7
  8. data/app/assets/stylesheets/decidim/admin/_decidim.scss +2 -0
  9. data/app/assets/stylesheets/decidim/admin/bundle.scss +1 -0
  10. data/app/assets/stylesheets/decidim/admin/components/_autocomplete_select.component.scss +13 -0
  11. data/app/assets/stylesheets/decidim/admin/modules/_secondary-nav.scss +3 -2
  12. data/app/assets/stylesheets/decidim/admin/modules/_table-list.scss +7 -0
  13. data/app/commands/decidim/admin/create_static_page.rb +7 -1
  14. data/app/commands/decidim/admin/update_component_permissions.rb +9 -3
  15. data/app/commands/decidim/admin/update_organization_tos_version.rb +47 -0
  16. data/app/commands/decidim/admin/update_static_page.rb +5 -0
  17. data/app/constraints/decidim/admin/organization_dashboard_constraint.rb +6 -3
  18. data/app/controllers/concerns/decidim/admin/participatory_space_admin_context.rb +2 -2
  19. data/app/controllers/decidim/admin/application_controller.rb +14 -5
  20. data/app/controllers/decidim/admin/area_types_controller.rb +6 -6
  21. data/app/controllers/decidim/admin/areas_controller.rb +6 -6
  22. data/app/controllers/decidim/admin/authorization_workflows_controller.rb +1 -1
  23. data/app/controllers/decidim/admin/categories_controller.rb +7 -7
  24. data/app/controllers/decidim/admin/component_permissions_controller.rb +20 -8
  25. data/app/controllers/decidim/admin/components/base_controller.rb +19 -3
  26. data/app/controllers/decidim/admin/components_controller.rb +8 -8
  27. data/app/controllers/decidim/admin/concerns/has_attachment_collections.rb +8 -8
  28. data/app/controllers/decidim/admin/concerns/has_attachments.rb +11 -9
  29. data/app/controllers/decidim/admin/concerns/has_private_users.rb +5 -5
  30. data/app/controllers/decidim/admin/dashboard_controller.rb +4 -2
  31. data/app/controllers/decidim/admin/exports_controller.rb +1 -1
  32. data/app/controllers/decidim/admin/impersonatable_users_controller.rb +7 -1
  33. data/app/controllers/decidim/admin/impersonations_controller.rb +2 -4
  34. data/app/controllers/decidim/admin/logs_controller.rb +4 -2
  35. data/app/controllers/decidim/admin/managed_users/impersonation_logs_controller.rb +0 -2
  36. data/app/controllers/decidim/admin/managed_users/promotions_controller.rb +2 -2
  37. data/app/controllers/decidim/admin/moderations_controller.rb +4 -4
  38. data/app/controllers/decidim/admin/newsletters_controller.rb +9 -9
  39. data/app/controllers/decidim/admin/oauth_applications_controller.rb +7 -7
  40. data/app/controllers/decidim/admin/officializations_controller.rb +4 -5
  41. data/app/controllers/decidim/admin/organization_appearance_controller.rb +2 -2
  42. data/app/controllers/decidim/admin/organization_controller.rb +21 -2
  43. data/app/controllers/decidim/admin/scope_types_controller.rb +6 -6
  44. data/app/controllers/decidim/admin/scopes_controller.rb +7 -7
  45. data/app/controllers/decidim/admin/static_pages_controller.rb +16 -7
  46. data/app/controllers/decidim/admin/user_groups_controller.rb +3 -3
  47. data/app/controllers/decidim/admin/users_controller.rb +5 -5
  48. data/app/forms/decidim/admin/managed_user_promotion_form.rb +1 -1
  49. data/app/forms/decidim/admin/permission_form.rb +12 -15
  50. data/app/forms/decidim/admin/static_page_form.rb +1 -0
  51. data/app/frontend/components/autocomplete.component.test.tsx +19 -0
  52. data/app/frontend/components/autocomplete.component.tsx +169 -0
  53. data/app/frontend/entry.ts +17 -0
  54. data/app/frontend/entry_test.ts +4 -0
  55. data/app/helpers/decidim/admin/application_helper.rb +0 -4
  56. data/app/permissions/decidim/admin/permissions.rb +161 -0
  57. data/app/permissions/decidim/admin/user_manager_permissions.rb +66 -0
  58. data/app/views/decidim/admin/area_types/index.html.erb +8 -4
  59. data/app/views/decidim/admin/areas/index.html.erb +6 -3
  60. data/app/views/decidim/admin/attachment_collections/index.html.erb +3 -3
  61. data/app/views/decidim/admin/attachment_collections/show.html.erb +2 -2
  62. data/app/views/decidim/admin/attachments/index.html.erb +3 -3
  63. data/app/views/decidim/admin/attachments/show.html.erb +2 -2
  64. data/app/views/decidim/admin/categories/index.html.erb +5 -5
  65. data/app/views/decidim/admin/categories/show.html.erb +2 -2
  66. data/app/views/decidim/admin/component_permissions/_options_form.html.erb +14 -0
  67. data/app/views/decidim/admin/component_permissions/edit.html.erb +37 -16
  68. data/app/views/decidim/admin/components/_component.html.erb +6 -4
  69. data/app/views/decidim/admin/components/_form.html.erb +6 -6
  70. data/app/views/decidim/admin/dashboard/show.html.erb +1 -1
  71. data/app/views/decidim/admin/impersonatable_users/index.html.erb +5 -3
  72. data/app/views/decidim/admin/moderations/index.html.erb +2 -2
  73. data/app/views/decidim/admin/newsletters/index.html.erb +5 -3
  74. data/app/views/decidim/admin/newsletters/show.html.erb +1 -1
  75. data/app/views/decidim/admin/oauth_applications/index.html.erb +5 -3
  76. data/app/views/decidim/admin/participatory_space_private_users/index.html.erb +3 -3
  77. data/app/views/decidim/admin/scope_types/index.html.erb +5 -3
  78. data/app/views/decidim/admin/scopes/index.html.erb +4 -4
  79. data/app/views/decidim/admin/static_pages/_form.html.erb +3 -1
  80. data/app/views/decidim/admin/static_pages/_form_notable_changes.html.erb +9 -0
  81. data/app/views/decidim/admin/static_pages/index.html.erb +11 -3
  82. data/app/views/decidim/admin/static_pages/show.html.erb +2 -2
  83. data/app/views/decidim/admin/user_groups/index.html.erb +2 -2
  84. data/app/views/decidim/admin/users/index.html.erb +5 -3
  85. data/app/views/layouts/decidim/admin/_application.html.erb +0 -1
  86. data/app/views/layouts/decidim/admin/_template_top.html.erb +1 -0
  87. data/app/views/layouts/decidim/admin/users.html.erb +4 -4
  88. data/config/locales/ca.yml +8 -0
  89. data/config/locales/en.yml +8 -0
  90. data/config/locales/es.yml +8 -0
  91. data/config/locales/eu.yml +8 -0
  92. data/config/locales/fi.yml +8 -0
  93. data/config/locales/fr.yml +8 -0
  94. data/config/locales/gl.yml +8 -0
  95. data/config/locales/it.yml +8 -0
  96. data/config/locales/nl.yml +8 -0
  97. data/config/locales/pl.yml +8 -0
  98. data/config/locales/pt-BR.yml +8 -0
  99. data/config/locales/pt.yml +8 -0
  100. data/config/locales/ru.yml +11 -3
  101. data/config/locales/sv.yml +8 -0
  102. data/config/locales/uk.yml +8 -0
  103. data/config/routes.rb +5 -1
  104. data/lib/decidim/admin.rb +1 -0
  105. data/lib/decidim/admin/engine.rb +17 -20
  106. data/lib/decidim/admin/form_builder.rb +64 -0
  107. data/lib/decidim/admin/test/manage_component_permissions_examples.rb +92 -15
  108. data/lib/decidim/admin/version.rb +1 -1
  109. metadata +25 -17
  110. data/app/models/decidim/admin/abilities/admin_ability.rb +0 -76
  111. data/app/models/decidim/admin/abilities/base_ability.rb +0 -21
  112. data/app/models/decidim/admin/abilities/participatory_process_admin_ability.rb +0 -58
  113. data/app/models/decidim/admin/abilities/participatory_process_collaborator_ability.rb +0 -19
  114. data/app/models/decidim/admin/abilities/participatory_process_moderator_ability.rb +0 -23
  115. data/app/models/decidim/admin/abilities/user_manager_ability.rb +0 -34
  116. data/app/models/decidim/admin/application_record.rb +0 -11
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Admin
5
+ class UserManagerPermissions < Decidim::DefaultPermissions
6
+ def permissions
7
+ return permission_action unless user_manager? || user.admin?
8
+ allow! if read_admin_dashboard_action?
9
+
10
+ allow! if managed_user_action?
11
+ allow! if user_action?
12
+
13
+ permission_action
14
+ end
15
+
16
+ private
17
+
18
+ def user_manager?
19
+ user && !user.admin? && user.role?("user_manager")
20
+ end
21
+
22
+ def read_admin_dashboard_action?
23
+ permission_action.subject == :admin_dashboard &&
24
+ permission_action.action == :read
25
+ end
26
+
27
+ def managed_user_action?
28
+ return unless permission_action.subject == :managed_user
29
+
30
+ case permission_action.action
31
+ when :create
32
+ !organization.available_authorizations.empty?
33
+ else
34
+ true
35
+ end
36
+ end
37
+
38
+ def user_action?
39
+ return unless [:user, :impersonatable_user].include?(permission_action.subject)
40
+ subject_user = context.fetch(:user, nil)
41
+
42
+ case permission_action.action
43
+ when :promote
44
+ subject_user.managed? && Decidim::ImpersonationLog.active.where(admin: user).empty?
45
+ when :impersonate
46
+ available_authorization_handlers? &&
47
+ !subject_user.admin? &&
48
+ subject_user.roles.empty? &&
49
+ Decidim::ImpersonationLog.active.where(admin: user).empty?
50
+ when :destroy
51
+ subject_user != user
52
+ else
53
+ true
54
+ end
55
+ end
56
+
57
+ def organization
58
+ @organization ||= context.fetch(:organization, nil) || context.fetch(:current_organization, nil)
59
+ end
60
+
61
+ def available_authorization_handlers?
62
+ user.organization.available_authorization_handlers.any?
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,6 +1,11 @@
1
1
  <div class="card" id="area-types">
2
2
  <div class="card-divider">
3
- <h2 class="card-title"><%= t "decidim.admin.titles.area_types" %> <%= link_to t("actions.add", scope: "decidim.admin"), ["new", "area_type"], class: "button tiny button--title new" %></h2>
3
+ <h2 class="card-title">
4
+ <%= t "decidim.admin.titles.area_types" %>
5
+ <% if allowed_to? :create, :area_type %>
6
+ <%= link_to t("actions.add", scope: "decidim.admin"), ["new", "area_type"], class: "button tiny button--title new" %>
7
+ <% end %>
8
+ </h2>
4
9
  </div>
5
10
  <div class="card-section">
6
11
  <div class="table-scroll">
@@ -22,12 +27,11 @@
22
27
  <%= translated_attribute(area_type.plural) %>
23
28
  </td>
24
29
  <td class="table-list__actions">
25
-
26
- <% if can? :update, area_type %>
30
+ <% if allowed_to? :update, :area_type, area_type: area_type %>
27
31
  <%= icon_link_to "pencil", ["edit", area_type], t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit", method: :get, data: {} %>
28
32
  <% end %>
29
33
 
30
- <% if can? :destroy, area_type %>
34
+ <% if allowed_to? :destroy, :area_type, area_type: area_type %>
31
35
  <%= icon_link_to "circle-x", area_type, t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
32
36
  <% end %>
33
37
  </td>
@@ -1,7 +1,10 @@
1
1
  <div class="card" id="areas">
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
- <%= t "decidim.admin.titles.areas" %> <%= link_to t("actions.add", scope: "decidim.admin"), new_area_path, class: "button tiny button--title new" %>
4
+ <%= t "decidim.admin.titles.areas" %>
5
+ <% if allowed_to? :create, :area %>
6
+ <%= link_to t("actions.add", scope: "decidim.admin"), new_area_path, class: "button tiny button--title new" %>
7
+ <% end %>
5
8
  </h2>
6
9
  </div>
7
10
  <div class="card-section">
@@ -25,11 +28,11 @@
25
28
  <%= area.area_type ? translated_attribute(area.area_type.name) : "-" %>
26
29
  </td>
27
30
  <td class="table-list__actions">
28
- <% if can? :update, area %>
31
+ <% if allowed_to? :update, :area, area: area %>
29
32
  <%= icon_link_to "pencil", ["edit", area], t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit", method: :get, data: {} %>
30
33
  <% end %>
31
34
 
32
- <% if can? :destroy, area %>
35
+ <% if allowed_to? :destroy, :area, area: area %>
33
36
  <%= icon_link_to "circle-x", area, t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
34
37
  <% end %>
35
38
  </td>
@@ -2,7 +2,7 @@
2
2
  <div class="card-divider">
3
3
  <h2 class='card-title'>
4
4
  <%= t("attachment_collections.index.attachment_collections_title", scope: "decidim.admin") %>
5
- <% if can? :create, Decidim::AttachmentCollection %>
5
+ <% if allowed_to? :create, :attachment_collection %>
6
6
  <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.attachment_collection.name", scope: "decidim.admin")), url_for(action: :new), class: "button tiny button--title new" %>
7
7
  <% end %>
8
8
  </h2>
@@ -25,11 +25,11 @@
25
25
  <%= link_to translated_attribute(attachment_collection.name), edit_polymorphic_path([collection_for, attachment_collection]) %><br />
26
26
  </td>
27
27
  <td class="table-list__actions">
28
- <% if can? :update, attachment_collection %>
28
+ <% if allowed_to? :update, :attachment_collection, attachment_collection: attachment_collection %>
29
29
  <%= icon_link_to "pencil", edit_polymorphic_path([collection_for, attachment_collection]), t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit" %>
30
30
  <% end %>
31
31
 
32
- <% if can? :destroy, attachment_collection %>
32
+ <% if allowed_to? :destroy, :attachment_collection, attachment_collection: attachment_collection %>
33
33
  <% if attachment_collection.unused? %>
34
34
  <%= icon_link_to "circle-x", polymorphic_path([collection_for, attachment_collection]), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
35
35
  <% else %>
@@ -2,8 +2,8 @@
2
2
 
3
3
  <div class="actions">
4
4
  <hr />
5
- <%= link_to t("decidim.admin.actions.edit"), ["edit", @attachment_collection.collection_for, @attachment_collection], class: "button" if can? :update, @attachment_collection %>
6
- <%= link_to t("decidim.admin.actions.destroy"), [@attachment_collection.collection_for, @attachment_collection], method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if can? :destroy, @attachment_collection %>
5
+ <%= link_to t("decidim.admin.actions.edit"), ["edit", @attachment_collection.collection_for, @attachment_collection], class: "button" if allowed_to? :update, :attachment_collection, attachment_collection: @attachment_collection %>
6
+ <%= link_to t("decidim.admin.actions.destroy"), [@attachment_collection.collection_for, @attachment_collection], method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if allowed_to? :destroy, :attachment_collection, attachment_collection: @attachment_collection %>
7
7
  </div>
8
8
 
9
9
  <dl>
@@ -2,7 +2,7 @@
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
4
  <%= t(".attachments_title") %>
5
- <% if can? :create, authorization_object %>
5
+ <% if allowed_to? :create, :attachment %>
6
6
  <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.attachment.name", scope: "decidim.admin")), url_for(action: :new), class: "button tiny button--title new" %>
7
7
  <% end %>
8
8
  </h2>
@@ -37,11 +37,11 @@
37
37
  <%= number_to_human_size(attachment.file_size) %>
38
38
  </td>
39
39
  <td class="table-list__actions">
40
- <% if can? :update, authorization_object %>
40
+ <% if allowed_to? :update, :attachment, attachment: attachment %>
41
41
  <%= icon_link_to "pencil", edit_polymorphic_path([attached_to, attachment]), t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit" %>
42
42
  <% end %>
43
43
 
44
- <% if can? :destroy, authorization_object %>
44
+ <% if allowed_to? :destroy, :attachment, attachment: attachment %>
45
45
  <%= icon_link_to "circle-x", polymorphic_path([attached_to, attachment]), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
46
46
  <% end %>
47
47
  </td>
@@ -2,8 +2,8 @@
2
2
 
3
3
  <div class="actions">
4
4
  <hr />
5
- <%= link_to t("decidim.admin.actions.edit"), ["edit", @attachment.attached_to, @attachment] if can? :update, @attachment %>
6
- <%= link_to t("decidim.admin.actions.destroy"), [@attachment.attached_to, @attachment], method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if can? :destroy, @attachment %>
5
+ <%= link_to t("decidim.admin.actions.edit"), ["edit", @attachment.attached_to, @attachment] if allowed_to? :update, :attachment, attachment: @attachment %>
6
+ <%= link_to t("decidim.admin.actions.destroy"), [@attachment.attached_to, @attachment], method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if allowed_to? :destroy, :attachment, attachment: @attachment %>
7
7
  </div>
8
8
 
9
9
  <dl>
@@ -2,7 +2,7 @@
2
2
  <div class="card-divider">
3
3
  <h2 class='card-title'>
4
4
  <%= t("categories.index.categories_title", scope: "decidim.admin") %>
5
- <% if can? :create, Decidim::Category %>
5
+ <% if allowed_to? :create, :category %>
6
6
  <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.category.name", scope: "decidim.admin")), new_category_path(current_participatory_space), class: "button tiny button--title new" %>
7
7
  <% end %>
8
8
  </h2>
@@ -25,11 +25,11 @@
25
25
  <%= link_to translated_attribute(category.name), edit_category_path(current_participatory_space, category) %><br />
26
26
  </td>
27
27
  <td class="table-list__actions">
28
- <% if can? :update, category %>
28
+ <% if allowed_to? :update, :category, category: category %>
29
29
  <%= icon_link_to "pencil", edit_category_path(current_participatory_space, category), t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit" %>
30
30
  <% end %>
31
31
 
32
- <% if can? :destroy, category %>
32
+ <% if allowed_to? :destroy, :category, category: category %>
33
33
  <% if category.unused? %>
34
34
  <%= icon_link_to "circle-x", category_path(current_participatory_space, category), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
35
35
  <% else %>
@@ -46,11 +46,11 @@
46
46
  <%= link_to translated_attribute(subcategory.name), edit_category_path(current_participatory_space, subcategory) %><br />
47
47
  </td>
48
48
  <td class="table-list__actions">
49
- <% if can? :update, subcategory %>
49
+ <% if allowed_to? :update, :category, category: subcategory %>
50
50
  <%= icon_link_to "pencil", edit_category_path(current_participatory_space, subcategory), t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit" %>
51
51
  <% end %>
52
52
 
53
- <% if can? :destroy, subcategory %>
53
+ <% if allowed_to? :destroy, :category, category: subcategory %>
54
54
  <%= icon_link_to "circle-x", category_path(current_participatory_space, subcategory), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
55
55
  <% end %>
56
56
  </td>
@@ -2,8 +2,8 @@
2
2
 
3
3
  <div class="actions">
4
4
  <hr />
5
- <%= link_to t("decidim.admin.actions.edit"), ["edit", participatory_space, @category] if can? :update, @category %>
6
- <%= link_to t("decidim.admin.actions.destroy"), [participatory_space, @category], method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if can? :destroy, @category %>
5
+ <%= link_to t("decidim.admin.actions.edit"), ["edit", participatory_space, @category] if allowed_to? :update, :category, category: @category %>
6
+ <%= link_to t("decidim.admin.actions.destroy"), [participatory_space, @category], method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if allowed_to? :destroy, :category, category: @category %>
7
7
  </div>
8
8
 
9
9
  <dl>
@@ -0,0 +1,14 @@
1
+ <%
2
+ schema = form.object.options_schema
3
+ attributes = form.object.options_attributes
4
+ %>
5
+
6
+ <%= form.fields_for(:options, schema) do |options_form| %>
7
+ <% attributes.each do |name, attribute| %>
8
+ <%= options_form.send(
9
+ form_method_for_attribute(attribute),
10
+ name,
11
+ label: t("authorization_handlers.#{form.object.authorization_handler_name}.fields.#{name}", scope: "decidim")
12
+ ) %>
13
+ <% end %>
14
+ <% end %>
@@ -5,23 +5,44 @@
5
5
  </div>
6
6
  </div>
7
7
 
8
- <%= form_for @permissions_form, url: url_for(action: :update), method: "put" do |form| %>
9
- <%= form.fields_for :permissions, form.object do |form| %>
10
- <% form.object.permissions.each do |action, permission| %>
11
- <%= form.fields_for(action, permission) do |form| %>
12
- <fieldset class="card <%= action %>-permission">
13
- <div class="card-divider"><%= t("#{component.manifest.name}.actions.#{action}", scope: "decidim.components") %></div>
14
- <div class="card-section">
15
- <%= form.select :authorization_handler_name,
16
- authorizations.map { |authorization|
17
- [authorization.description, authorization.key]
18
- }, include_blank: t(".everyone") %>
19
- <%= form.text_field :options %>
20
- </div>
21
- </fieldset>
22
- <% end %>
8
+ <%= form_for @permissions_form, url: url_for(action: :update), method: "put" do |permissions_form| %>
9
+ <%= permissions_form.fields_for :permissions, permissions_form.object do |action_permission_form| %>
10
+ <% action_permission_form.object.permissions.each do |action, permission| %>
11
+ <fieldset class="card <%= action %>-permission">
12
+ <div class="card-divider"><%= t("#{component.manifest.name}.actions.#{action}", scope: "decidim.components") %></div>
13
+
14
+ <div class="card-section">
15
+ <%= action_permission_form.fields_for(action, permission) do |permission_form| %>
16
+ <%= permission_form.collection_select :authorization_handler_name,
17
+ authorizations,
18
+ :name,
19
+ :description,
20
+ { include_blank: t(".everyone") } %>
21
+ <% if permission.authorization_handler_name %>
22
+ <div id="authorization-handler-<%= permission.authorization_handler_name %>"
23
+ class="authorization-handler">
24
+ <%= render "options_form", form: permission_form %>
25
+ </div>
26
+ <% end %>
27
+ <% end %>
28
+
29
+ <% other_authorizations_for(action).each do |authorization| %>
30
+ <% permission = Decidim::Admin::PermissionForm.new(authorization_handler_name: authorization.name) %>
31
+
32
+ <%= action_permission_form.fields_for(action, permission) do |permission_form| %>
33
+ <div id="authorization-handler-<%= authorization.name %>"
34
+ class="authorization-handler"
35
+ style="display:none">
36
+ <%= render "options_form", form: permission_form %>
37
+ </div>
38
+ <% end %>
39
+ <% end %>
40
+ </div>
41
+ </fieldset>
23
42
  <% end %>
24
43
  <% end %>
25
- <%= form.submit t(".submit") %>
44
+ <%= permissions_form.submit t(".submit") %>
26
45
  <% end %>
27
46
  </section>
47
+
48
+ <%= javascript_include_tag "decidim/admin/component_permissions" %>
@@ -12,7 +12,7 @@
12
12
  <%= icon_link_to "pencil", manage_component_path(component), t("actions.manage", scope: "decidim.admin"), class: "action-icon--manage" %>
13
13
  <% end %>
14
14
 
15
- <% if can?(:update, component) %>
15
+ <% if allowed_to?(:update, :component, component: component) %>
16
16
  <% if component.published? %>
17
17
  <%= icon_link_to "x", url_for(action: :unpublish, id: component, controller: "components"), t("actions.unpublish", scope: "decidim.admin"), class: "action-icon--unpublish", method: :put %>
18
18
  <% else %>
@@ -20,11 +20,11 @@
20
20
  <% end %>
21
21
  <% end %>
22
22
 
23
- <% if can? :update, component %>
23
+ <% if allowed_to? :update, :component, component: component %>
24
24
  <%= icon_link_to "cog", url_for(action: :edit, id: component, controller: "components"), t("actions.configure", scope: "decidim.admin"), class: "action-icon--configure" %>
25
25
  <% end %>
26
26
 
27
- <% if can? :update, component %>
27
+ <% if allowed_to? :update, :component, component: component %>
28
28
  <% if component.manifest.actions.empty? %>
29
29
  <%= icon "key", class: "action-icon action-icon--disabled" %>
30
30
  <% else %>
@@ -32,6 +32,8 @@
32
32
  <% end %>
33
33
  <% end %>
34
34
 
35
- <%= icon_link_to "circle-x", url_for(action: :destroy, id: component, controller: "components"), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete %>
35
+ <% if allowed_to? :destroy, :component, component: component %>
36
+ <%= icon_link_to "circle-x", url_for(action: :destroy, id: component, controller: "components"), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete %>
37
+ <% end %>
36
38
  </td>
37
39
  </tr>
@@ -17,12 +17,12 @@
17
17
  <div class="card-section">
18
18
  <%= form.fields_for :settings, form.object.settings do |settings_fields| %>
19
19
  <%= render partial: "decidim/admin/components/settings_fields",
20
- locals: {
21
- form: settings_fields,
22
- component: @component,
23
- settings_name: "global",
24
- tabs_prefix: "global-settings"
25
- } %>
20
+ locals: {
21
+ form: settings_fields,
22
+ component: @component,
23
+ settings_name: "global",
24
+ tabs_prefix: "global-settings"
25
+ } %>
26
26
  <% end %>
27
27
  </div>
28
28
  </div>
@@ -3,7 +3,7 @@
3
3
  </h2>
4
4
  <div class="content">
5
5
  <p><%= t ".welcome" %></p>
6
- <% if can? :read, :admin_log %>
6
+ <% if allowed_to? :read, :admin_log %>
7
7
  <div class="row">
8
8
  <h3 class="card-title">
9
9
  </h3>
@@ -47,7 +47,9 @@
47
47
  <div class="card-divider">
48
48
  <h2 class="card-title">
49
49
  <%= t "decidim.admin.titles.impersonatable_users" %>
50
- <%= link_to t(".impersonate_new_managed_user"), new_impersonatable_user_impersonation_path(:new_managed_user), class: "button tiny button--title #{'disabled' if current_organization.available_authorizations.empty?}" %>
50
+ <% if allowed_to? :impersonate, :impersonatable_user, user: new_managed_user %>
51
+ <%= link_to t(".impersonate_new_managed_user"), new_impersonatable_user_impersonation_path(:new_managed_user), class: "button tiny button--title #{'disabled' if current_organization.available_authorizations.empty?}" %>
52
+ <% end %>
51
53
  </h2>
52
54
  </div>
53
55
  <div class="card-section">
@@ -66,11 +68,11 @@
66
68
  <td><%= user.name %></td>
67
69
  <td><%= user.managed? ? t(".managed") : t(".not_managed") %></td>
68
70
  <td class="table-list__actions">
69
- <% if can? :impersonate, user %>
71
+ <% if allowed_to? :impersonate, :impersonatable_user, user: user %>
70
72
  <%= icon_link_to "account-login", new_impersonatable_user_impersonation_path(user), t(".impersonate"), class: "action-icon--impersonate" %>
71
73
  <% end %>
72
74
  <%= icon_link_to "clock", impersonatable_user_impersonation_logs_path(user), t(".view_logs"), class: "action-icon--view-logs" %>
73
- <% if can? :promote, user %>
75
+ <% if allowed_to? :promote, :impersonatable_user, user: user %>
74
76
  <%= icon_link_to "badge", new_impersonatable_user_promotion_path(user), t(".promote"), class: "action-icon--promote" %>
75
77
  <% end %>
76
78
  </td>
@@ -51,14 +51,14 @@
51
51
  <% end %>
52
52
  <td class="actions">
53
53
 
54
- <% if can? :unreport, moderation %>
54
+ <% if allowed_to?(:unreport, :moderation) %>
55
55
  <%= icon_link_to "action-undo",
56
56
  unreport_moderation_path(id: moderation),
57
57
  t("actions.unreport", scope: "decidim.moderations"),
58
58
  class: "action-icon--unreport",
59
59
  method: :put %>
60
60
  <% end %>
61
- <% if !moderation.reportable.hidden? && can?(:hide, moderation) %>
61
+ <% if !moderation.reportable.hidden? && allowed_to?(:hide, :moderation) %>
62
62
  <%= icon_link_to "eye",
63
63
  hide_moderation_path(id: moderation),
64
64
  t("actions.hide", scope: "decidim.moderations"),
@@ -2,7 +2,9 @@
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
4
  <%= t ".title" %>
5
- <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.newsletter.name", scope: "decidim.admin").downcase), ["new", "newsletter"], class: "button tiny button--title new" %>
5
+ <% if allowed_to? :create, :newsletter %>
6
+ <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.newsletter.name", scope: "decidim.admin").downcase), ["new", "newsletter"], class: "button tiny button--title new" %>
7
+ <% end %>
6
8
  </h2>
7
9
  </div>
8
10
  <div class="card-section">
@@ -29,13 +31,13 @@
29
31
  <% end %>
30
32
  </td>
31
33
  <td class="table-list__actions">
32
- <% if can?(:update, newsletter) && !newsletter.sent? %>
34
+ <% if allowed_to?(:update, :newsletter, newsletter: newsletter) && !newsletter.sent? %>
33
35
  <%= icon_link_to "pencil", decidim_admin.edit_newsletter_path(newsletter), t("actions.edit", scope: "decidim.admin"), class: "edit" %>
34
36
  <% end %>
35
37
 
36
38
  <%= icon_link_to "eye", decidim_admin.newsletter_path(newsletter), t("actions.preview", scope: "decidim.admin"), class: "preview" %>
37
39
 
38
- <% if can?(:destroy, newsletter) && !newsletter.sent? %>
40
+ <% if allowed_to?(:destroy, :newsletter, newsletter: newsletter) && !newsletter.sent? %>
39
41
  <%= icon_link_to "circle-x", decidim_admin.newsletter_path(newsletter), t("actions.destroy", scope: "decidim.admin"), method: :delete, data: { confirm: t(".confirm_delete") }, class: "action-icon--remove" %>
40
42
  <% end %>
41
43
  </td>