activeadmin 2.9.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (278) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +284 -1
  3. data/CONTRIBUTING.md +4 -12
  4. data/README.md +2 -2
  5. data/app/assets/javascripts/active_admin/base.js +13 -9
  6. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  7. data/app/assets/stylesheets/active_admin/_forms.scss +1 -11
  8. data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
  9. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  10. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
  11. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +9 -0
  12. data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
  13. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  14. data/app/javascript/active_admin/initializers/has-many.js +4 -1
  15. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  16. data/app/views/active_admin/page/index.html.arb +1 -0
  17. data/app/views/active_admin/resource/edit.html.arb +1 -0
  18. data/app/views/active_admin/resource/index.html.arb +1 -0
  19. data/app/views/active_admin/resource/new.html.arb +1 -0
  20. data/app/views/active_admin/resource/show.html.arb +1 -0
  21. data/app/views/layouts/active_admin.html.arb +1 -0
  22. data/app/views/layouts/active_admin_logged_out.html.erb +5 -4
  23. data/config/locales/ar.yml +0 -7
  24. data/config/locales/az.yml +0 -7
  25. data/config/locales/bg.yml +0 -7
  26. data/config/locales/bs.yml +0 -7
  27. data/config/locales/ca.yml +0 -7
  28. data/config/locales/cs.yml +0 -7
  29. data/config/locales/da.yml +0 -7
  30. data/config/locales/de-CH.yml +0 -7
  31. data/config/locales/de.yml +0 -8
  32. data/config/locales/el.yml +0 -7
  33. data/config/locales/en-CA.yml +0 -7
  34. data/config/locales/en-GB.yml +0 -7
  35. data/config/locales/en.yml +0 -8
  36. data/config/locales/eo.yml +0 -8
  37. data/config/locales/es-MX.yml +0 -7
  38. data/config/locales/es.yml +0 -8
  39. data/config/locales/fa.yml +0 -7
  40. data/config/locales/fi.yml +0 -7
  41. data/config/locales/fr.yml +3 -11
  42. data/config/locales/he.yml +0 -9
  43. data/config/locales/hr.yml +0 -7
  44. data/config/locales/hu.yml +0 -8
  45. data/config/locales/id.yml +0 -7
  46. data/config/locales/it.yml +0 -8
  47. data/config/locales/ja.yml +0 -8
  48. data/config/locales/ko.yml +1 -8
  49. data/config/locales/lt.yml +0 -8
  50. data/config/locales/lv.yml +0 -7
  51. data/config/locales/mk.yml +0 -8
  52. data/config/locales/nb.yml +0 -8
  53. data/config/locales/nl.yml +1 -9
  54. data/config/locales/pl.yml +0 -8
  55. data/config/locales/pt-BR.yml +0 -8
  56. data/config/locales/pt-PT.yml +0 -7
  57. data/config/locales/ro.yml +3 -9
  58. data/config/locales/ru.yml +0 -6
  59. data/config/locales/sk.yml +0 -8
  60. data/config/locales/sv-SE.yml +58 -39
  61. data/config/locales/tr.yml +0 -11
  62. data/config/locales/uk.yml +0 -6
  63. data/config/locales/vi.yml +34 -15
  64. data/config/locales/zh-CN.yml +34 -23
  65. data/config/locales/zh-TW.yml +0 -7
  66. data/lib/active_admin/abstract_view_factory.rb +1 -0
  67. data/lib/active_admin/application.rb +10 -10
  68. data/lib/active_admin/application_settings.rb +1 -0
  69. data/lib/active_admin/asset_registration.rb +4 -3
  70. data/lib/active_admin/authorization_adapter.rb +3 -0
  71. data/lib/active_admin/base_controller/authorization.rb +4 -3
  72. data/lib/active_admin/base_controller/menu.rb +1 -0
  73. data/lib/active_admin/base_controller.rb +2 -1
  74. data/lib/active_admin/batch_actions/controller.rb +1 -0
  75. data/lib/active_admin/batch_actions/resource_extension.rb +1 -0
  76. data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -0
  77. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -0
  78. data/lib/active_admin/batch_actions/views/selection_cells.rb +1 -0
  79. data/lib/active_admin/batch_actions.rb +1 -0
  80. data/lib/active_admin/callbacks.rb +1 -0
  81. data/lib/active_admin/cancan_adapter.rb +1 -0
  82. data/lib/active_admin/collection_decorator.rb +1 -0
  83. data/lib/active_admin/component.rb +1 -0
  84. data/lib/active_admin/controller_action.rb +1 -0
  85. data/lib/active_admin/csv_builder.rb +24 -16
  86. data/lib/active_admin/dependency.rb +1 -4
  87. data/lib/active_admin/devise.rb +11 -0
  88. data/lib/active_admin/dsl.rb +1 -0
  89. data/lib/active_admin/dynamic_setting.rb +1 -0
  90. data/lib/active_admin/dynamic_settings_node.rb +1 -0
  91. data/lib/active_admin/engine.rb +8 -2
  92. data/lib/active_admin/error.rb +1 -0
  93. data/lib/active_admin/filters/active.rb +1 -0
  94. data/lib/active_admin/filters/active_filter.rb +2 -1
  95. data/lib/active_admin/filters/active_sidebar.rb +2 -28
  96. data/lib/active_admin/filters/dsl.rb +1 -0
  97. data/lib/active_admin/filters/forms.rb +3 -2
  98. data/lib/active_admin/filters/formtastic_addons.rb +2 -1
  99. data/lib/active_admin/filters/resource_extension.rb +5 -4
  100. data/lib/active_admin/filters.rb +1 -0
  101. data/lib/active_admin/form_builder.rb +1 -0
  102. data/lib/active_admin/generators/boilerplate.rb +1 -0
  103. data/lib/active_admin/helpers/collection.rb +2 -0
  104. data/lib/active_admin/helpers/i18n.rb +1 -0
  105. data/lib/active_admin/helpers/optional_display.rb +1 -0
  106. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  107. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  108. data/lib/active_admin/inputs/datepicker_input.rb +1 -0
  109. data/lib/active_admin/inputs/filters/base/search_method_select.rb +3 -2
  110. data/lib/active_admin/inputs/filters/base.rb +1 -0
  111. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -0
  112. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -0
  113. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  114. data/lib/active_admin/inputs/filters/date_range_input.rb +3 -2
  115. data/lib/active_admin/inputs/filters/numeric_input.rb +2 -1
  116. data/lib/active_admin/inputs/filters/select_input.rb +3 -0
  117. data/lib/active_admin/inputs/filters/string_input.rb +2 -1
  118. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  119. data/lib/active_admin/inputs.rb +1 -0
  120. data/lib/active_admin/localizers/resource_localizer.rb +1 -0
  121. data/lib/active_admin/localizers.rb +1 -0
  122. data/lib/active_admin/menu.rb +2 -0
  123. data/lib/active_admin/menu_collection.rb +1 -0
  124. data/lib/active_admin/menu_item.rb +1 -0
  125. data/lib/active_admin/namespace.rb +4 -3
  126. data/lib/active_admin/namespace_settings.rb +2 -1
  127. data/lib/active_admin/order_clause.rb +1 -0
  128. data/lib/active_admin/orm/active_record/comments/comment.rb +9 -0
  129. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  130. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  131. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  132. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +2 -1
  133. data/lib/active_admin/orm/active_record/comments/views.rb +1 -0
  134. data/lib/active_admin/orm/active_record/comments.rb +9 -8
  135. data/lib/active_admin/orm/active_record.rb +1 -0
  136. data/lib/active_admin/orm/mongoid.rb +1 -0
  137. data/lib/active_admin/page.rb +1 -0
  138. data/lib/active_admin/page_controller.rb +1 -0
  139. data/lib/active_admin/page_dsl.rb +1 -0
  140. data/lib/active_admin/page_presenter.rb +1 -0
  141. data/lib/active_admin/pundit_adapter.rb +55 -13
  142. data/lib/active_admin/resource/action_items.rb +3 -2
  143. data/lib/active_admin/resource/attributes.rb +1 -0
  144. data/lib/active_admin/resource/belongs_to.rb +1 -0
  145. data/lib/active_admin/resource/controllers.rb +1 -0
  146. data/lib/active_admin/resource/includes.rb +1 -0
  147. data/lib/active_admin/resource/menu.rb +1 -0
  148. data/lib/active_admin/resource/model.rb +1 -0
  149. data/lib/active_admin/resource/naming.rb +1 -0
  150. data/lib/active_admin/resource/ordering.rb +1 -0
  151. data/lib/active_admin/resource/page_presenters.rb +1 -0
  152. data/lib/active_admin/resource/pagination.rb +1 -0
  153. data/lib/active_admin/resource/routes.rb +1 -0
  154. data/lib/active_admin/resource/scope_to.rb +1 -0
  155. data/lib/active_admin/resource/scopes.rb +1 -0
  156. data/lib/active_admin/resource/sidebars.rb +1 -0
  157. data/lib/active_admin/resource.rb +3 -2
  158. data/lib/active_admin/resource_collection.rb +1 -0
  159. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  160. data/lib/active_admin/resource_controller/data_access.rb +30 -4
  161. data/lib/active_admin/resource_controller/decorators.rb +1 -0
  162. data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
  163. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  164. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  165. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  166. data/lib/active_admin/resource_controller/streaming.rb +3 -2
  167. data/lib/active_admin/resource_controller.rb +1 -0
  168. data/lib/active_admin/resource_dsl.rb +7 -21
  169. data/lib/active_admin/router.rb +1 -0
  170. data/lib/active_admin/scope.rb +1 -0
  171. data/lib/active_admin/settings_node.rb +1 -0
  172. data/lib/active_admin/sidebar_section.rb +1 -0
  173. data/lib/active_admin/version.rb +2 -1
  174. data/lib/active_admin/view_factory.rb +1 -0
  175. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  176. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  177. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +1 -0
  178. data/lib/active_admin/view_helpers/display_helper.rb +19 -4
  179. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  180. data/lib/active_admin/view_helpers/fields_for.rb +1 -0
  181. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  182. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  183. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  184. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  185. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  186. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  187. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  188. data/lib/active_admin/view_helpers.rb +1 -0
  189. data/lib/active_admin/views/action_items.rb +1 -0
  190. data/lib/active_admin/views/components/active_admin_form.rb +2 -5
  191. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  192. data/lib/active_admin/views/components/attributes_table.rb +1 -0
  193. data/lib/active_admin/views/components/blank_slate.rb +1 -0
  194. data/lib/active_admin/views/components/columns.rb +1 -0
  195. data/lib/active_admin/views/components/dropdown_menu.rb +3 -5
  196. data/lib/active_admin/views/components/index_list.rb +1 -0
  197. data/lib/active_admin/views/components/menu.rb +1 -0
  198. data/lib/active_admin/views/components/menu_item.rb +1 -0
  199. data/lib/active_admin/views/components/paginated_collection.rb +1 -0
  200. data/lib/active_admin/views/components/panel.rb +1 -0
  201. data/lib/active_admin/views/components/scopes.rb +1 -0
  202. data/lib/active_admin/views/components/sidebar.rb +1 -0
  203. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  204. data/lib/active_admin/views/components/site_title.rb +1 -0
  205. data/lib/active_admin/views/components/status_tag.rb +1 -0
  206. data/lib/active_admin/views/components/table_for.rb +1 -0
  207. data/lib/active_admin/views/components/tabs.rb +1 -0
  208. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  209. data/lib/active_admin/views/footer.rb +1 -0
  210. data/lib/active_admin/views/header.rb +1 -0
  211. data/lib/active_admin/views/index_as_block.rb +1 -0
  212. data/lib/active_admin/views/index_as_blog.rb +1 -0
  213. data/lib/active_admin/views/index_as_grid.rb +1 -0
  214. data/lib/active_admin/views/index_as_table.rb +2 -5
  215. data/lib/active_admin/views/pages/base.rb +8 -4
  216. data/lib/active_admin/views/pages/form.rb +1 -0
  217. data/lib/active_admin/views/pages/index.rb +2 -1
  218. data/lib/active_admin/views/pages/layout.rb +1 -0
  219. data/lib/active_admin/views/pages/page.rb +1 -0
  220. data/lib/active_admin/views/pages/show.rb +2 -7
  221. data/lib/active_admin/views/tabbed_navigation.rb +1 -0
  222. data/lib/active_admin/views/title_bar.rb +1 -0
  223. data/lib/active_admin/views.rb +1 -0
  224. data/lib/active_admin.rb +6 -3
  225. data/lib/activeadmin.rb +1 -0
  226. data/lib/generators/active_admin/assets/assets_generator.rb +1 -0
  227. data/lib/generators/active_admin/devise/devise_generator.rb +1 -0
  228. data/lib/generators/active_admin/install/install_generator.rb +1 -0
  229. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +18 -1
  230. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  231. data/lib/generators/active_admin/page/page_generator.rb +1 -0
  232. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  233. data/lib/generators/active_admin/resource/resource_generator.rb +1 -0
  234. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +1 -0
  235. metadata +26 -83
  236. data/docs/.gitignore +0 -1
  237. data/docs/0-installation.md +0 -142
  238. data/docs/1-general-configuration.md +0 -224
  239. data/docs/10-custom-pages.md +0 -150
  240. data/docs/11-decorators.md +0 -70
  241. data/docs/12-arbre-components.md +0 -214
  242. data/docs/13-authorization-adapter.md +0 -285
  243. data/docs/14-gotchas.md +0 -138
  244. data/docs/2-resource-customization.md +0 -475
  245. data/docs/3-index-pages/custom-index.md +0 -35
  246. data/docs/3-index-pages/index-as-block.md +0 -19
  247. data/docs/3-index-pages/index-as-blog.md +0 -69
  248. data/docs/3-index-pages/index-as-grid.md +0 -27
  249. data/docs/3-index-pages/index-as-table.md +0 -234
  250. data/docs/3-index-pages.md +0 -328
  251. data/docs/4-csv-format.md +0 -74
  252. data/docs/5-forms.md +0 -237
  253. data/docs/6-show-pages.md +0 -93
  254. data/docs/7-sidebars.md +0 -75
  255. data/docs/8-custom-actions.md +0 -177
  256. data/docs/9-batch-actions.md +0 -237
  257. data/docs/CNAME +0 -1
  258. data/docs/Gemfile +0 -3
  259. data/docs/Gemfile.lock +0 -259
  260. data/docs/README.md +0 -24
  261. data/docs/_config.yml +0 -4
  262. data/docs/_includes/footer.html +0 -8
  263. data/docs/_includes/google-analytics.html +0 -16
  264. data/docs/_includes/head.html +0 -7
  265. data/docs/_includes/toc.html +0 -98
  266. data/docs/_includes/top-menu.html +0 -17
  267. data/docs/_layouts/default.html +0 -21
  268. data/docs/documentation.md +0 -60
  269. data/docs/images/activeadmin.png +0 -0
  270. data/docs/images/code-header.png +0 -0
  271. data/docs/images/divider.png +0 -0
  272. data/docs/images/features.png +0 -0
  273. data/docs/images/tidelift.svg +0 -14
  274. data/docs/index.html +0 -226
  275. data/docs/stylesheets/main.css +0 -1205
  276. data/lib/active_admin/deprecation.rb +0 -10
  277. data/lib/ransack_ext.rb +0 -20
  278. /data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
@@ -1,214 +0,0 @@
1
- ---
2
- redirect_from: /docs/12-arbre-components.html
3
- ---
4
-
5
- # Arbre Components
6
-
7
- Arbre allows the creation of shareable and extendable HTML components and is
8
- used throughout Active Admin to create view components.
9
-
10
- ## Text Node
11
-
12
- Sometimes it makes sense to insert something into a registered resource like a
13
- non-breaking space or some text. The text_node method can be used to insert
14
- these elements into the page inside of other Arbre components or resource
15
- controller functions.
16
-
17
- ```ruby
18
- ActiveAdmin.register Post do
19
- show do
20
- panel "Post Details" do
21
- attributes_table_for post do
22
- row :id
23
- row 'Tags' do
24
- post.tags.each do |tag|
25
- a tag, href: admin_post_path(q: {tagged_with_contains: tag})
26
- text_node " ".html_safe
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
33
- ```
34
-
35
- ## Panels
36
-
37
- A panel is a component that takes up all available horizontal space and takes a
38
- title and a hash of attributes as arguments. If a sidebar is present, a panel
39
- will take up the remaining space.
40
-
41
- This will create two stacked panels:
42
-
43
- ```ruby
44
- show do
45
- panel "Post Details" do
46
- render partial: "details", locals: {post: post}
47
- end
48
-
49
- panel "Post Tags" do
50
- render partial: "tags", locals: {post: post}
51
- end
52
- end
53
- ```
54
-
55
- ## Columns
56
-
57
- The Columns component allows you draw content into scalable columns. All you
58
- need to do is define the number of columns and the component will take care of
59
- the rest.
60
-
61
- ### Simple Columns
62
-
63
- To create simple columns, use the `columns` method. Within the block, call
64
- the #column method to create a new column.
65
-
66
- ```ruby
67
- columns do
68
- column do
69
- span "Column #1"
70
- end
71
-
72
- column do
73
- span "Column #2"
74
- end
75
- end
76
- ```
77
-
78
- ### Spanning Multiple Columns
79
-
80
- To create columns that have multiple spans, pass the :span option to the column
81
- method.
82
-
83
- ```ruby
84
- columns do
85
- column span: 2 do
86
- span "Column # 1"
87
- end
88
- column do
89
- span "Column # 2"
90
- end
91
- end
92
- ```
93
-
94
- By default, each column spans 1 column. The above layout would have 2 columns,
95
- the first being twice as large as the second.
96
-
97
- ### Custom Column Widths
98
-
99
- Active Admin uses a fluid width layout, causing column width to be defined
100
- using percentages. Due to using this style of layout, columns can shrink or
101
- expand past points that may not be desirable. To overcome this issue,
102
- columns provide `:max_width` and `:min_width` options.
103
-
104
- ```ruby
105
- columns do
106
- column max_width: "200px", min_width: "100px" do
107
- span "Column # 1"
108
- end
109
- column do
110
- span "Column # 2"
111
- end
112
- end
113
- ```
114
-
115
- In the above example, the first column will not grow larger than 200px and will
116
- not shrink less than 100px.
117
-
118
- ### Custom Column Class
119
-
120
- Pass the `:class` option to the column method to set a custom class.
121
-
122
- ```ruby
123
- columns do
124
- column class: "important" do
125
- span "Column # 1"
126
- end
127
- column do
128
- span "Column # 2"
129
- end
130
- end
131
- ```
132
-
133
- ## Table For
134
-
135
- Table For provides the ability to create tables like those present
136
- in `index_as_table`. It takes a collection and a hash of options and then
137
- uses `column` to build the fields to show with the table.
138
-
139
- ```ruby
140
- table_for order.payments do
141
- column(:payment_type) { |payment| payment.payment_type.titleize }
142
- column "Received On", :created_at
143
- column "Details & Notes", :payment_details
144
- column "Amount", :amount_in_dollars
145
- end
146
- ```
147
-
148
- The `column` method can take a title as its first argument and data
149
- (`:your_method`) as its second (or first if no title provided). Column also
150
- takes a block.
151
-
152
- ### Internationalization
153
-
154
- To customize the internationalization for the component, specify a resource to
155
- use for translations via the `i18n` named parameter. This is only necessary for
156
- non-`ActiveRecord::Relation` collections:
157
-
158
- ```ruby
159
- table_for payments, i18n: Payment do
160
- # ...
161
- end
162
- ```
163
-
164
- ## Status tag
165
-
166
- Status tags provide convenient syntactic sugar for styling items that have
167
- status. A common example of where the status tag could be useful is for orders
168
- that are complete or in progress. `status_tag` takes a status, like
169
- "In Progress", and a hash of options. The status_tag will generate HTML markup
170
- that Active Admin CSS uses in styling.
171
-
172
- ```ruby
173
- status_tag 'In Progress'
174
- # => <span class='status_tag in_progress'>In Progress</span>
175
-
176
- status_tag 'active', class: 'important', id: 'status_123', label: 'on'
177
- # => <span class='status_tag active important' id='status_123'>on</span>
178
- ```
179
-
180
- When providing a `true` or `false` value, the `status_tag` will display "Yes"
181
- or "No". This can be configured through the `"en.active_admin.status_tag"`
182
- locale.
183
-
184
- ```ruby
185
- status_tag true
186
- # => <span class='status_tag yes'>Yes</span>
187
- ```
188
-
189
- In the case that a boolean field is `nil`, it will display "No" as a default.
190
- But using the `"en.active_admin.status_tag.unset"` locale key, it can be
191
- configured to display something else.
192
-
193
- ## Tabs
194
-
195
- The Tabs component is helpful for saving page real estate. The first tab will be
196
- the one open when the page initially loads and the rest hidden. You can click
197
- each tab to toggle back and forth between them. Arbre supports unlimited number
198
- of tabs.
199
-
200
- ```ruby
201
- tabs do
202
- tab :active do
203
- table_for orders.active do
204
- ...
205
- end
206
- end
207
-
208
- tab :inactive do
209
- table_for orders.inactive do
210
- ...
211
- end
212
- end
213
- end
214
- ```
@@ -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`.