activeadmin 2.6.1 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (326) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +438 -9
  3. data/CONTRIBUTING.md +12 -36
  4. data/README.md +8 -8
  5. data/app/assets/javascripts/active_admin/base.js +27 -25
  6. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  7. data/app/assets/stylesheets/active_admin/_forms.scss +2 -13
  8. data/app/assets/stylesheets/active_admin/_header.scss +37 -3
  9. data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
  10. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  11. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  12. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +7 -5
  13. data/app/assets/stylesheets/active_admin/components/_pagination.scss +5 -2
  14. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +9 -6
  15. data/app/assets/stylesheets/active_admin/components/_tabs.scss +10 -7
  16. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +2 -2
  17. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +12 -0
  18. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +1 -1
  19. data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
  20. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +6 -4
  21. data/app/javascript/active_admin/initializers/has-many.js +4 -1
  22. data/app/javascript/active_admin/initializers/per-page.js +1 -1
  23. data/app/javascript/active_admin/lib/checkbox-toggler.js +3 -3
  24. data/app/javascript/active_admin/lib/dropdown-menu.js +1 -1
  25. data/app/javascript/active_admin/lib/modal-dialog.js +7 -7
  26. data/app/javascript/active_admin/lib/per-page.js +1 -1
  27. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +1 -1
  28. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  29. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  30. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  31. data/app/views/active_admin/page/index.html.arb +1 -0
  32. data/app/views/active_admin/resource/edit.html.arb +1 -0
  33. data/app/views/active_admin/resource/index.html.arb +1 -0
  34. data/app/views/active_admin/resource/new.html.arb +1 -0
  35. data/app/views/active_admin/resource/show.html.arb +1 -0
  36. data/app/views/layouts/active_admin.html.arb +1 -0
  37. data/app/views/layouts/active_admin_logged_out.html.erb +18 -7
  38. data/config/locales/ar.yml +6 -13
  39. data/config/locales/az.yml +0 -7
  40. data/config/locales/bg.yml +0 -7
  41. data/config/locales/bs.yml +0 -7
  42. data/config/locales/ca.yml +0 -7
  43. data/config/locales/cs.yml +0 -7
  44. data/config/locales/da.yml +0 -7
  45. data/config/locales/de-CH.yml +0 -7
  46. data/config/locales/de.yml +0 -8
  47. data/config/locales/el.yml +0 -7
  48. data/config/locales/en-CA.yml +0 -7
  49. data/config/locales/en-GB.yml +0 -7
  50. data/config/locales/en.yml +0 -8
  51. data/config/locales/eo.yml +0 -8
  52. data/config/locales/es-MX.yml +2 -8
  53. data/config/locales/es.yml +2 -10
  54. data/config/locales/fa.yml +0 -7
  55. data/config/locales/fi.yml +0 -7
  56. data/config/locales/fr.yml +3 -11
  57. data/config/locales/he.yml +0 -9
  58. data/config/locales/hr.yml +0 -7
  59. data/config/locales/hu.yml +0 -8
  60. data/config/locales/id.yml +0 -7
  61. data/config/locales/it.yml +18 -8
  62. data/config/locales/ja.yml +2 -10
  63. data/config/locales/ko.yml +1 -8
  64. data/config/locales/lt.yml +0 -8
  65. data/config/locales/lv.yml +0 -7
  66. data/config/locales/mk.yml +0 -8
  67. data/config/locales/nb.yml +0 -8
  68. data/config/locales/nl.yml +1 -9
  69. data/config/locales/pl.yml +0 -8
  70. data/config/locales/pt-BR.yml +0 -8
  71. data/config/locales/pt-PT.yml +0 -7
  72. data/config/locales/ro.yml +3 -9
  73. data/config/locales/ru.yml +0 -6
  74. data/config/locales/sk.yml +0 -8
  75. data/config/locales/sv-SE.yml +58 -39
  76. data/config/locales/tr.yml +0 -11
  77. data/config/locales/uk.yml +0 -6
  78. data/config/locales/vi.yml +38 -19
  79. data/config/locales/zh-CN.yml +34 -23
  80. data/config/locales/zh-TW.yml +0 -7
  81. data/lib/active_admin/abstract_view_factory.rb +1 -0
  82. data/lib/active_admin/application.rb +19 -19
  83. data/lib/active_admin/application_settings.rb +4 -3
  84. data/lib/active_admin/asset_registration.rb +4 -3
  85. data/lib/active_admin/authorization_adapter.rb +6 -3
  86. data/lib/active_admin/base_controller/authorization.rb +15 -13
  87. data/lib/active_admin/base_controller/menu.rb +1 -0
  88. data/lib/active_admin/base_controller.rb +6 -5
  89. data/lib/active_admin/batch_actions/controller.rb +4 -3
  90. data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
  91. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  92. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  93. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
  94. data/lib/active_admin/batch_actions.rb +1 -0
  95. data/lib/active_admin/callbacks.rb +1 -0
  96. data/lib/active_admin/cancan_adapter.rb +2 -1
  97. data/lib/active_admin/collection_decorator.rb +32 -0
  98. data/lib/active_admin/component.rb +1 -0
  99. data/lib/active_admin/controller_action.rb +1 -0
  100. data/lib/active_admin/csv_builder.rb +25 -17
  101. data/lib/active_admin/dependency.rb +12 -15
  102. data/lib/active_admin/devise.rb +16 -5
  103. data/lib/active_admin/dsl.rb +2 -1
  104. data/lib/active_admin/dynamic_setting.rb +1 -0
  105. data/lib/active_admin/dynamic_settings_node.rb +3 -2
  106. data/lib/active_admin/engine.rb +17 -9
  107. data/lib/active_admin/error.rb +1 -2
  108. data/lib/active_admin/filters/active.rb +2 -1
  109. data/lib/active_admin/filters/active_filter.rb +6 -6
  110. data/lib/active_admin/filters/active_sidebar.rb +4 -30
  111. data/lib/active_admin/filters/dsl.rb +1 -0
  112. data/lib/active_admin/filters/forms.rb +9 -8
  113. data/lib/active_admin/filters/formtastic_addons.rb +3 -7
  114. data/lib/active_admin/filters/resource_extension.rb +6 -5
  115. data/lib/active_admin/filters.rb +8 -7
  116. data/lib/active_admin/form_builder.rb +25 -20
  117. data/lib/active_admin/generators/boilerplate.rb +2 -1
  118. data/lib/active_admin/helpers/collection.rb +2 -0
  119. data/lib/active_admin/helpers/i18n.rb +1 -0
  120. data/lib/active_admin/helpers/optional_display.rb +3 -2
  121. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  122. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  123. data/lib/active_admin/inputs/datepicker_input.rb +2 -1
  124. data/lib/active_admin/inputs/filters/base/search_method_select.rb +7 -6
  125. data/lib/active_admin/inputs/filters/base.rb +2 -1
  126. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  127. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  128. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  129. data/lib/active_admin/inputs/filters/date_range_input.rb +3 -2
  130. data/lib/active_admin/inputs/filters/numeric_input.rb +2 -1
  131. data/lib/active_admin/inputs/filters/select_input.rb +5 -2
  132. data/lib/active_admin/inputs/filters/string_input.rb +2 -1
  133. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  134. data/lib/active_admin/inputs.rb +1 -0
  135. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  136. data/lib/active_admin/localizers.rb +2 -1
  137. data/lib/active_admin/menu.rb +8 -3
  138. data/lib/active_admin/menu_collection.rb +1 -0
  139. data/lib/active_admin/menu_item.rb +8 -7
  140. data/lib/active_admin/namespace.rb +16 -15
  141. data/lib/active_admin/namespace_settings.rb +9 -5
  142. data/lib/active_admin/order_clause.rb +2 -1
  143. data/lib/active_admin/orm/active_record/comments/comment.rb +12 -3
  144. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  145. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  146. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  147. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +21 -20
  148. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  149. data/lib/active_admin/orm/active_record/comments.rb +28 -27
  150. data/lib/active_admin/orm/active_record.rb +2 -1
  151. data/lib/active_admin/orm/mongoid.rb +1 -0
  152. data/lib/active_admin/page.rb +2 -1
  153. data/lib/active_admin/page_controller.rb +1 -0
  154. data/lib/active_admin/page_dsl.rb +1 -0
  155. data/lib/active_admin/page_presenter.rb +1 -0
  156. data/lib/active_admin/pundit_adapter.rb +58 -16
  157. data/lib/active_admin/resource/action_items.rb +6 -5
  158. data/lib/active_admin/resource/attributes.rb +9 -1
  159. data/lib/active_admin/resource/belongs_to.rb +3 -2
  160. data/lib/active_admin/resource/controllers.rb +2 -1
  161. data/lib/active_admin/resource/includes.rb +1 -0
  162. data/lib/active_admin/resource/menu.rb +5 -4
  163. data/lib/active_admin/resource/model.rb +1 -0
  164. data/lib/active_admin/resource/naming.rb +5 -4
  165. data/lib/active_admin/resource/ordering.rb +1 -0
  166. data/lib/active_admin/resource/page_presenters.rb +1 -0
  167. data/lib/active_admin/resource/pagination.rb +1 -0
  168. data/lib/active_admin/resource/routes.rb +6 -7
  169. data/lib/active_admin/resource/scope_to.rb +8 -7
  170. data/lib/active_admin/resource/scopes.rb +1 -0
  171. data/lib/active_admin/resource/sidebars.rb +2 -1
  172. data/lib/active_admin/resource.rb +20 -19
  173. data/lib/active_admin/resource_collection.rb +1 -0
  174. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  175. data/lib/active_admin/resource_controller/data_access.rb +31 -5
  176. data/lib/active_admin/resource_controller/decorators.rb +7 -28
  177. data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
  178. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  179. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  180. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  181. data/lib/active_admin/resource_controller/streaming.rb +9 -7
  182. data/lib/active_admin/resource_controller.rb +13 -11
  183. data/lib/active_admin/resource_dsl.rb +11 -25
  184. data/lib/active_admin/router.rb +1 -0
  185. data/lib/active_admin/scope.rb +7 -6
  186. data/lib/active_admin/settings_node.rb +1 -0
  187. data/lib/active_admin/sidebar_section.rb +1 -0
  188. data/lib/active_admin/version.rb +2 -1
  189. data/lib/active_admin/view_factory.rb +18 -17
  190. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  191. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  192. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  193. data/lib/active_admin/view_helpers/display_helper.rb +23 -8
  194. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  195. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  196. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  197. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  198. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  199. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  200. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  201. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  202. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  203. data/lib/active_admin/view_helpers.rb +2 -1
  204. data/lib/active_admin/views/action_items.rb +1 -0
  205. data/lib/active_admin/views/components/active_admin_form.rb +8 -11
  206. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  207. data/lib/active_admin/views/components/attributes_table.rb +6 -5
  208. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  209. data/lib/active_admin/views/components/columns.rb +1 -0
  210. data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
  211. data/lib/active_admin/views/components/index_list.rb +4 -3
  212. data/lib/active_admin/views/components/menu.rb +2 -1
  213. data/lib/active_admin/views/components/menu_item.rb +5 -4
  214. data/lib/active_admin/views/components/paginated_collection.rb +19 -18
  215. data/lib/active_admin/views/components/panel.rb +2 -1
  216. data/lib/active_admin/views/components/scopes.rb +8 -5
  217. data/lib/active_admin/views/components/sidebar.rb +1 -0
  218. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  219. data/lib/active_admin/views/components/site_title.rb +2 -1
  220. data/lib/active_admin/views/components/status_tag.rb +12 -11
  221. data/lib/active_admin/views/components/table_for.rb +18 -17
  222. data/lib/active_admin/views/components/tabs.rb +4 -3
  223. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  224. data/lib/active_admin/views/footer.rb +3 -1
  225. data/lib/active_admin/views/header.rb +3 -2
  226. data/lib/active_admin/views/index_as_block.rb +1 -0
  227. data/lib/active_admin/views/index_as_blog.rb +2 -1
  228. data/lib/active_admin/views/index_as_grid.rb +2 -1
  229. data/lib/active_admin/views/index_as_table.rb +16 -19
  230. data/lib/active_admin/views/pages/base.rb +17 -11
  231. data/lib/active_admin/views/pages/form.rb +1 -0
  232. data/lib/active_admin/views/pages/index.rb +15 -13
  233. data/lib/active_admin/views/pages/layout.rb +1 -0
  234. data/lib/active_admin/views/pages/page.rb +1 -0
  235. data/lib/active_admin/views/pages/show.rb +2 -7
  236. data/lib/active_admin/views/tabbed_navigation.rb +3 -2
  237. data/lib/active_admin/views/title_bar.rb +2 -1
  238. data/lib/active_admin/views.rb +2 -1
  239. data/lib/active_admin.rb +63 -61
  240. data/lib/activeadmin.rb +2 -1
  241. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  242. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  243. data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
  244. data/lib/generators/active_admin/install/install_generator.rb +15 -8
  245. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +27 -3
  246. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  247. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  248. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  249. data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
  250. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  251. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  252. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  253. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  254. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  255. data/vendor/assets/javascripts/jquery-ui/data.js +12 -8
  256. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +10 -7
  257. data/vendor/assets/javascripts/jquery-ui/focusable.js +12 -9
  258. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +60 -57
  259. data/vendor/assets/javascripts/jquery-ui/form.js +15 -12
  260. data/vendor/assets/javascripts/jquery-ui/ie.js +5 -2
  261. data/vendor/assets/javascripts/jquery-ui/keycode.js +11 -7
  262. data/vendor/assets/javascripts/jquery-ui/labels.js +46 -40
  263. data/vendor/assets/javascripts/jquery-ui/plugin.js +5 -2
  264. data/vendor/assets/javascripts/jquery-ui/position.js +30 -17
  265. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +6 -2
  266. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +6 -2
  267. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +10 -7
  268. data/vendor/assets/javascripts/jquery-ui/tabbable.js +11 -8
  269. data/vendor/assets/javascripts/jquery-ui/unique-id.js +10 -7
  270. data/vendor/assets/javascripts/jquery-ui/version.js +6 -3
  271. data/vendor/assets/javascripts/jquery-ui/widget.js +53 -30
  272. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +87 -24
  273. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +276 -273
  274. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +15 -11
  275. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +182 -62
  276. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +53 -36
  277. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +28 -19
  278. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +22 -11
  279. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +47 -26
  280. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +186 -125
  281. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +20 -20
  282. metadata +48 -114
  283. data/docs/.gitignore +0 -1
  284. data/docs/0-installation.md +0 -118
  285. data/docs/1-general-configuration.md +0 -224
  286. data/docs/10-custom-pages.md +0 -150
  287. data/docs/11-decorators.md +0 -59
  288. data/docs/12-arbre-components.md +0 -214
  289. data/docs/13-authorization-adapter.md +0 -285
  290. data/docs/14-gotchas.md +0 -138
  291. data/docs/2-resource-customization.md +0 -466
  292. data/docs/3-index-pages/custom-index.md +0 -35
  293. data/docs/3-index-pages/index-as-block.md +0 -19
  294. data/docs/3-index-pages/index-as-blog.md +0 -69
  295. data/docs/3-index-pages/index-as-grid.md +0 -27
  296. data/docs/3-index-pages/index-as-table.md +0 -234
  297. data/docs/3-index-pages.md +0 -328
  298. data/docs/4-csv-format.md +0 -74
  299. data/docs/5-forms.md +0 -232
  300. data/docs/6-show-pages.md +0 -81
  301. data/docs/7-sidebars.md +0 -75
  302. data/docs/8-custom-actions.md +0 -177
  303. data/docs/9-batch-actions.md +0 -237
  304. data/docs/CNAME +0 -1
  305. data/docs/Gemfile +0 -3
  306. data/docs/Gemfile.lock +0 -248
  307. data/docs/README.md +0 -24
  308. data/docs/_config.yml +0 -4
  309. data/docs/_includes/footer.html +0 -8
  310. data/docs/_includes/google-analytics.html +0 -16
  311. data/docs/_includes/head.html +0 -7
  312. data/docs/_includes/toc.html +0 -98
  313. data/docs/_includes/top-menu.html +0 -17
  314. data/docs/_layouts/default.html +0 -21
  315. data/docs/documentation.md +0 -60
  316. data/docs/images/activeadmin.png +0 -0
  317. data/docs/images/code-header.png +0 -0
  318. data/docs/images/divider.png +0 -0
  319. data/docs/images/features.png +0 -0
  320. data/docs/images/tidelift.svg +0 -14
  321. data/docs/index.html +0 -226
  322. data/docs/stylesheets/main.css +0 -1205
  323. data/lib/active_admin/deprecation.rb +0 -10
  324. data/lib/ransack_ext.rb +0 -20
  325. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +0 -23
  326. /data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
@@ -1,285 +0,0 @@
1
- ---
2
- redirect_from: /docs/13-authorization-adapter.html
3
- ---
4
-
5
- # Authorization Adapter
6
-
7
- Active Admin offers the ability to define and use your own authorization
8
- adapter. If implemented, the '#authorized?' will be called when an action is
9
- taken. By default, '#authorized?' returns true.
10
-
11
- ## Setting up your own AuthorizationAdapter
12
-
13
- The following example shows how to set up and tie your authorization
14
- adapter class to Active Admin:
15
-
16
- ```ruby
17
- # app/models/only_authors_authorization.rb
18
- class OnlyAuthorsAuthorization < ActiveAdmin::AuthorizationAdapter
19
-
20
- def authorized?(action, subject = nil)
21
- case subject
22
- when normalized(Post)
23
- # Only let the author update and delete posts
24
- if action == :update || action == :destroy
25
- subject.author == user
26
- else
27
- true
28
- end
29
- else
30
- true
31
- end
32
- end
33
-
34
- end
35
- ```
36
-
37
- In order to hook up `OnlyAuthorsAuthorization` to Active Admin, go to your
38
- application's `config/initializers/active_admin.rb` and add/modify the line:
39
-
40
- ```ruby
41
- config.authorization_adapter = "OnlyAuthorsAuthorization"
42
- ```
43
-
44
- Now, whenever a controller action is performed, the `OnlyAuthorsAuthorization`'s
45
- `#authorized?` method will be called.
46
-
47
- Authorization adapters can be configured per ActiveAdmin namespace as well, for
48
- example:
49
-
50
- ```ruby
51
- ActiveAdmin.setup do |config|
52
- config.namespace :admin do |ns|
53
- ns.authorization_adapter = "AdminAuthorization"
54
- end
55
- config.namespace :my do |ns|
56
- ns.authorization_adapter = "DashboardAuthorization"
57
- end
58
- end
59
- ```
60
-
61
- ## Getting Access to the Current User
62
-
63
- From within your authorization adapter, you can call the `#user` method to
64
- retrieve the current user.
65
-
66
- ```ruby
67
- class OnlyAdmins < ActiveAdmin::AuthorizationAdapter
68
-
69
- def authorized?(action, subject = nil)
70
- user.admin?
71
- end
72
-
73
- end
74
- ```
75
-
76
- ## Scoping Collections in Authorization Adapters
77
-
78
- `ActiveAdmin::AuthorizationAdapter` also provides a hook method
79
- (`#scope_collection`) for the adapter to scope the resource's collection. For
80
- example, you may want to centralize the scoping:
81
-
82
- ```ruby
83
- class OnlyMyAccount < ActiveAdmin::AuthorizationAdapter
84
-
85
- def authorized?(action, subject = nil)
86
- subject.account == user.account
87
- end
88
-
89
- def scope_collection(collection, action = Auth::READ)
90
- collection.where(account_id: user.account_id)
91
- end
92
-
93
- end
94
- ```
95
-
96
- All collections presented on Index Screens will be passed through this method
97
- and will be scoped accordingly.
98
-
99
- ## Managing Access to Pages
100
-
101
- Pages, just like resources, get authorized too. When authorizing a page, the
102
- subject will be an instance of `ActiveAdmin::Page`.
103
-
104
- ```ruby
105
- class OnlyDashboard < ActiveAdmin::AuthorizationAdapter
106
- def authorized?(action, subject = nil)
107
- case subject
108
- when ActiveAdmin::Page
109
- action == :read &&
110
- subject.name == "Dashboard" &&
111
- subject.namespace.name == :admin
112
- else
113
- false
114
- end
115
- end
116
- end
117
- ```
118
-
119
- ## Action Types
120
-
121
- By default Active Admin simplifies the controller actions into 4 actions:
122
-
123
- * `:read` - This controls if the user can view the menu item as well as the
124
- index and show screens.
125
- * `:create` - This controls if the user can view the new screen and submit
126
- the form to the create action.
127
- * `:update` - This controls if the user can view the edit screen and submit
128
- the form to the update action.
129
- * `:destroy` - This controls if the user can delete a resource.
130
-
131
- Each of these actions is available as a constant. Eg: `:read` is available as
132
- `ActiveAdmin::Authorization::READ`.
133
-
134
- ## Checking for Authorization in Controllers and Views
135
-
136
- Active Admin provides a helper method to check if the current user is
137
- authorized to perform an action on a subject.
138
-
139
- Use the `#authorized?(action, subject)` method to check.
140
-
141
- ```ruby
142
- ActiveAdmin.register Post do
143
-
144
- index do
145
- column :title
146
- column '' do |post|
147
- link_to 'Edit', admin_post_path(post) if authorized? :update, post
148
- end
149
- end
150
-
151
- end
152
- ```
153
-
154
- If you are implementing a custom controller action, you can use the
155
- `#authorize!` method to raise an `ActiveAdmin::AccessDenied` exception.
156
-
157
- ```ruby
158
- ActiveAdmin.register Post do
159
-
160
- member_action :publish, method: :post do
161
- post = Post.find(params[:id])
162
-
163
- authorize! :publish, post
164
- post.publish!
165
-
166
- flash[:notice] = "Post has been published"
167
- redirect_to [:admin, post]
168
- end
169
-
170
- action_item :publish, only: :show do
171
- if !post.published? && authorized?(:publish, post)
172
- link_to "Publish", publish_admin_post_path(post), method: :post
173
- end
174
- end
175
-
176
- end
177
- ```
178
-
179
- ## Using the CanCan Adapter
180
-
181
- Sub-classing `ActiveAdmin::AuthorizationAdapter` is fairly low level. Many times
182
- it's nicer to have a simpler DSL for managing authorization. Active Admin
183
- provides an adapter out of the box for [CanCanCan](https://github.com/CanCanCommunity/cancancan).
184
-
185
- To use the CanCan adapter, update the configuration in the Active Admin
186
- initializer:
187
-
188
- ```ruby
189
- config.authorization_adapter = ActiveAdmin::CanCanAdapter
190
- ```
191
-
192
- You can also specify a method to be called on unauthorized access. This is
193
- necessary in order to prevent a redirect loop that can happen if a user tries to
194
- access a page they don't have permissions for (see
195
- [#2081](https://github.com/activeadmin/activeadmin/issues/2081)).
196
-
197
- ```ruby
198
- config.on_unauthorized_access = :access_denied
199
- ```
200
-
201
- The method `access_denied` would be defined in `application_controller.rb`. Here
202
- is one example that redirects the user from the page they don't have permission
203
- to access to a resource they have permission to access (organizations in this
204
- case), and also displays the error message in the browser:
205
-
206
- ```ruby
207
- class ApplicationController < ActionController::Base
208
- protect_from_forgery
209
-
210
- def access_denied(exception)
211
- redirect_to admin_organizations_path, alert: exception.message
212
- end
213
- end
214
- ```
215
-
216
- By default this will use the ability class named "Ability". This can also be
217
- changed from the initializer:
218
-
219
- ```ruby
220
- config.cancan_ability_class = "MyCustomAbility"
221
- ```
222
-
223
- Now you can simply use CanCanCan the way that you would expect and
224
- Active Admin will use it for authorization:
225
-
226
- ```ruby
227
- # app/models/ability.rb
228
- class Ability
229
- include CanCan::Ability
230
-
231
- def initialize(user)
232
- can :manage, Post
233
- can :read, User
234
- can :manage, User, id: user.id
235
- can :read, ActiveAdmin::Page, name: "Dashboard", namespace_name: "admin"
236
- end
237
-
238
- end
239
- ```
240
-
241
- To view more details about the API's, visit project pages of
242
- [CanCanCan](https://github.com/CanCanCommunity/cancancan).
243
-
244
- ## Using the Pundit Adapter
245
-
246
- Active Admin also provides an adapter out of the box for
247
- [Pundit](https://github.com/varvet/pundit).
248
-
249
- To use the Pundit adapter, update the configuration in the Active Admin
250
- initializer:
251
-
252
- ```ruby
253
- config.authorization_adapter = ActiveAdmin::PunditAdapter
254
- ```
255
-
256
- Once that's done, Active Admin will pick up your Pundit policies, and use
257
- them for authorization. For more information about setting up Pundit, see
258
- [their documentation](https://github.com/varvet/pundit#installation).
259
-
260
- Pundit also has [verify_authorized and/or verify_policy_scoped
261
- methods](https://github.com/varvet/pundit#ensuring-policies-and-scopes-are-used)
262
- to enforce usage of `authorized` and `policy_scope`. This conflicts with Active
263
- Admin's authorization architecture, so if you're using those features, you'll
264
- want to disable them for Active Admin's controllers:
265
-
266
- ```ruby
267
- class ApplicationController < ActionController::Base
268
- include Pundit
269
- after_action :verify_authorized, except: :index, unless: :active_admin_controller?
270
- after_action :verify_policy_scoped, only: :index, unless: :active_admin_controller?
271
-
272
- def active_admin_controller?
273
- is_a?(ActiveAdmin::BaseController)
274
- end
275
- end
276
- ```
277
-
278
- If you want to use batch actions, ensure that `destroy_all?` method is defined
279
- in your policy class. You can use this [template
280
- policy](https://github.com/activeadmin/activeadmin/blob/master/spec/support/templates/policies/application_policy.rb)
281
- in your application instead of default one generated by Pundit's
282
- `rails g pundit:install` command.
283
-
284
- In addition, there are [example policies](https://github.com/activeadmin/activeadmin/tree/master/spec/support/templates/policies/active_admin)
285
- for restricting access to ActiveAdmin's pages and comments.
data/docs/14-gotchas.md DELETED
@@ -1,138 +0,0 @@
1
- ---
2
- redirect_from: /docs/14-gotchas.html
3
- ---
4
-
5
- # Gotchas
6
-
7
- ## Security
8
-
9
- ### Spreadsheet applications vulnerable to unescaped CSV data
10
-
11
- If your CSV export includes untrusted data provided by your users, it's possible
12
- that they could include an executable formula that could call arbitrary commands
13
- on your computer. See
14
- [#4256](https://github.com/activeadmin/activeadmin/issues/4256) for more
15
- details.
16
-
17
- ## Session Commits & Asset Pipeline
18
-
19
- When configuring the asset pipeline ensure that the asset prefix
20
- (`config.assets.prefix`) is not the same as the namespace of ActiveAdmin
21
- (default namespace is `/admin`). If they are the same Sprockets will prevent the
22
- session from being committed. Flash messages won't work and you will be unable to
23
- use the session for storing anything.
24
-
25
- For more information see [the following
26
- post](http://www.intridea.com/blog/2013/3/20/rails-assets-prefix-may-disable-your-session).
27
-
28
- ## Helpers
29
-
30
- There are two known gotchas with helpers. This hopefully will help you to
31
- find a solution.
32
-
33
- ### Helpers are not reloading in development
34
-
35
- This is a known and still open
36
- [issue](https://github.com/activeadmin/activeadmin/issues/697) the only way is
37
- to restart your server each time you change a helper.
38
-
39
- ### Helper maybe not included by default
40
-
41
- If you use `config.action_controller.include_all_helpers = false` in your
42
- application config, you need to include it by hand.
43
-
44
- #### Solutions
45
-
46
- ##### First use a monkey patch
47
-
48
- This works for all ActiveAdmin resources at once.
49
-
50
- ```ruby
51
- # config/initializers/active_admin_helpers.rb
52
- ActiveAdmin::BaseController.class_eval do
53
- helper ApplicationHelper
54
- end
55
- ```
56
-
57
- ##### Second use the `controller` method
58
-
59
- This works only for one resource at a time.
60
-
61
- ```ruby
62
- ActiveAdmin.register User do
63
- controller do
64
- helper UserHelper
65
- end
66
- end
67
- ```
68
-
69
- ## CSS
70
-
71
- In order to avoid the override of your application style with the Active Admin
72
- one, you can do one of these things:
73
-
74
- * You can properly move the generated file `active_admin.scss` from
75
- `app/assets/stylesheets` to `vendor/assets/stylesheets`.
76
- * You can remove all `require_tree` commands from your root level css files,
77
- where the `active_admin.scss` is in the tree.
78
-
79
- ## Conflicts
80
-
81
- ### With gems that provides a `search` class method on a model
82
-
83
- If a gem defines a `search` class method on a model, this can result in conflicts
84
- with the same method provided by `ransack` (a dependency of ActiveAdmin).
85
-
86
- Each of this conflicts need to solved is a different way. Some solutions are
87
- listed below.
88
-
89
- #### `tire`, `retire` and `elasticsearch-rails`
90
-
91
- This conflict can be solved, by using explicitly the `search` method of `tire`,
92
- `retire` or `elasticsearch-rails`:
93
-
94
- ##### For `tire` and `retire`
95
-
96
- ```ruby
97
- YourModel.tire.search
98
- ```
99
-
100
- ##### For `elasticsearch-rails`
101
-
102
- ```ruby
103
- YourModel.__elasticsearch__.search
104
- ```
105
-
106
- ### Sunspot Solr
107
-
108
- ```ruby
109
- YourModel.solr_search
110
- ```
111
-
112
- ### Rails 5 scaffold generators
113
-
114
- Active Admin requires the `inherited_resources` gem which may break scaffolding
115
- under Rails 5 as it replaces the default scaffold generator. The solution is to
116
- configure the default controller in `config/application.rb` as outlined in
117
- [activeadmin/inherited_resources#195](https://github.com/activeadmin/inherited_resources/issues/195)
118
-
119
- ```ruby
120
- module SampleApp
121
- class Application < Rails::Application
122
- ...
123
- config.app_generators.scaffold_controller = :scaffold_controller
124
- ...
125
- end
126
- end
127
- ```
128
-
129
- ## Authentication & Application Controller
130
-
131
- The `ActiveAdmin::BaseController` inherits from the `ApplicationController`. Any
132
- authentication method(s) specified in the `ApplicationController` callbacks will
133
- be called instead of the authentication method in the active admin config file.
134
- For example, if the ApplicationController has a callback `before_action
135
- :custom_authentication_method` and the config file's authentication method is
136
- `config.authentication_method = :authenticate_active_admin_user`, then
137
- `custom_authentication_method` will be called instead of
138
- `authenticate_active_admin_user`.