symphonia 4.1.3 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +27 -1
  4. data/app/assets/javascripts/symphonia/application.js +3 -3
  5. data/app/assets/javascripts/symphonia/symphonia_bootstrap_dialog.js +23 -23
  6. data/app/assets/stylesheets/symphonia/_font_awesome.scss +8 -6
  7. data/app/assets/stylesheets/symphonia/_layout.scss +33 -1
  8. data/app/assets/stylesheets/symphonia/basic.scss +3 -99
  9. data/app/assets/stylesheets/symphonia/filters.scss +3 -5
  10. data/app/assets/stylesheets/symphonia/symphonia_bootstrap.scss +1 -1
  11. data/app/controllers/symphonia/accounts_controller.rb +7 -3
  12. data/app/controllers/symphonia/application_controller.rb +2 -1
  13. data/app/controllers/symphonia/users_controller.rb +17 -29
  14. data/app/helpers/symphonia/application_helper.rb +48 -26
  15. data/app/models/symphonia/preference.rb +5 -5
  16. data/app/models/symphonia/user.rb +3 -35
  17. data/app/models/symphonia/user_ability.rb +46 -0
  18. data/app/views/common/403.html.erb +4 -3
  19. data/app/views/layouts/symphonia/application.html.erb +4 -4
  20. data/app/views/symphonia/accounts/_detail.html.erb +21 -18
  21. data/app/views/symphonia/common/_filters.html.erb +15 -15
  22. data/app/views/symphonia/common/_share_links.html.erb +2 -3
  23. data/app/views/symphonia/users/_form.html.erb +1 -6
  24. data/app/views/symphonia/users/show.html.erb +15 -20
  25. data/config/locales/cs.yml +3 -2
  26. data/db/migrate/20130714140500_create_users.rb +0 -2
  27. data/db/seeds.rb +3 -3
  28. data/lib/generators/symphonia/entity_controller/entity_controller_generator.rb +2 -2
  29. data/lib/generators/symphonia/entity_controller/templates/{controller.rb → controller.rb.tt} +0 -0
  30. data/lib/symphonia/admin_constraint.rb +1 -1
  31. data/lib/symphonia/base_controller.rb +9 -17
  32. data/lib/symphonia/controller_extensions.rb +5 -15
  33. data/lib/symphonia/engine.rb +12 -43
  34. data/lib/symphonia/form_builder.rb +17 -16
  35. data/lib/symphonia/menu_manager.rb +15 -11
  36. data/lib/symphonia/model_attributes/attribute.rb +3 -3
  37. data/lib/symphonia/object.rb +9 -9
  38. data/lib/symphonia/spec_helper.rb +8 -4
  39. data/lib/symphonia/user_management.rb +1 -1
  40. data/lib/symphonia/version.rb +1 -1
  41. data/lib/symphonia.rb +12 -9
  42. data/spec/factories/factories.rb +0 -4
  43. data/spec/models/user_spec.rb +39 -2
  44. data/spec/spec_helper.rb +0 -1
  45. data/spec/support/stub_users.rb +7 -7
  46. metadata +41 -140
  47. data/app/controllers/symphonia/roles_controller.rb +0 -39
  48. data/app/models/symphonia/role.rb +0 -55
  49. data/app/views/symphonia/roles/_form.html.erb +0 -26
  50. data/app/views/symphonia/roles/edit.html.erb +0 -5
  51. data/app/views/symphonia/roles/index.html.erb +0 -6
  52. data/app/views/symphonia/roles/new.html.erb +0 -4
  53. data/app/views/symphonia/roles/show.html.erb +0 -11
  54. data/db/migrate/20130714140501_create_roles.rb +0 -18
  55. data/db/migrate/20210509141420_roles_change_permissions_to_json.rb +0 -18
  56. data/db/migrate/20210509180525_roles_change_permissions_to_native_json.rb +0 -7
  57. data/lib/symphonia/permissions.rb +0 -93
  58. data/spec/controllers/roles_controller_spec.rb +0 -12
  59. data/spec/models/role_spec.rb +0 -13
  60. data/spec/requests/roles_spec.rb +0 -10
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: symphonia
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.3
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Pokorny
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-02 00:00:00.000000000 Z
11
+ date: 2022-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: api-pagination
@@ -38,48 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 6.4.0
41
- - !ruby/object:Gem::Dependency
42
- name: awesome_nested_set
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 3.2.1
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 3.2.1
55
- - !ruby/object:Gem::Dependency
56
- name: bootstrap
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 4.6.0
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 4.6.0
69
- - !ruby/object:Gem::Dependency
70
- name: bootstrap-datepicker-rails
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
41
  - !ruby/object:Gem::Dependency
84
42
  name: bootstrap_form
85
43
  requirement: !ruby/object:Gem::Requirement
@@ -95,47 +53,33 @@ dependencies:
95
53
  - !ruby/object:Gem::Version
96
54
  version: 4.4.0
97
55
  - !ruby/object:Gem::Dependency
98
- name: font-awesome-rails
56
+ name: cancancan
99
57
  requirement: !ruby/object:Gem::Requirement
100
58
  requirements:
101
59
  - - "~>"
102
60
  - !ruby/object:Gem::Version
103
- version: 4.7.0.5
61
+ version: '3.4'
104
62
  type: :runtime
105
63
  prerelease: false
106
64
  version_requirements: !ruby/object:Gem::Requirement
107
65
  requirements:
108
66
  - - "~>"
109
67
  - !ruby/object:Gem::Version
110
- version: 4.7.0.5
111
- - !ruby/object:Gem::Dependency
112
- name: jquery-rails
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
68
+ version: '3.4'
125
69
  - !ruby/object:Gem::Dependency
126
- name: jquery-ui-rails
70
+ name: net-smtp
127
71
  requirement: !ruby/object:Gem::Requirement
128
72
  requirements:
129
- - - ">="
73
+ - - "~>"
130
74
  - !ruby/object:Gem::Version
131
- version: '0'
75
+ version: 0.3.1
132
76
  type: :runtime
133
77
  prerelease: false
134
78
  version_requirements: !ruby/object:Gem::Requirement
135
79
  requirements:
136
- - - ">="
80
+ - - "~>"
137
81
  - !ruby/object:Gem::Version
138
- version: '0'
82
+ version: 0.3.1
139
83
  - !ruby/object:Gem::Dependency
140
84
  name: rails
141
85
  requirement: !ruby/object:Gem::Requirement
@@ -154,16 +98,16 @@ dependencies:
154
98
  name: rails-i18n
155
99
  requirement: !ruby/object:Gem::Requirement
156
100
  requirements:
157
- - - ">="
101
+ - - "~>"
158
102
  - !ruby/object:Gem::Version
159
- version: '0'
103
+ version: '6.0'
160
104
  type: :runtime
161
105
  prerelease: false
162
106
  version_requirements: !ruby/object:Gem::Requirement
163
107
  requirements:
164
- - - ">="
108
+ - - "~>"
165
109
  - !ruby/object:Gem::Version
166
- version: '0'
110
+ version: '6.0'
167
111
  - !ruby/object:Gem::Dependency
168
112
  name: rake
169
113
  requirement: !ruby/object:Gem::Requirement
@@ -192,20 +136,6 @@ dependencies:
192
136
  - - ">="
193
137
  - !ruby/object:Gem::Version
194
138
  version: '0'
195
- - !ruby/object:Gem::Dependency
196
- name: sass-rails
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - ">="
200
- - !ruby/object:Gem::Version
201
- version: '0'
202
- type: :runtime
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- version: '0'
209
139
  - !ruby/object:Gem::Dependency
210
140
  name: scrypt
211
141
  requirement: !ruby/object:Gem::Requirement
@@ -240,14 +170,14 @@ dependencies:
240
170
  requirements:
241
171
  - - "~>"
242
172
  - !ruby/object:Gem::Version
243
- version: '1.2'
173
+ version: '1.3'
244
174
  type: :runtime
245
175
  prerelease: false
246
176
  version_requirements: !ruby/object:Gem::Requirement
247
177
  requirements:
248
178
  - - "~>"
249
179
  - !ruby/object:Gem::Version
250
- version: '1.2'
180
+ version: '1.3'
251
181
  - !ruby/object:Gem::Dependency
252
182
  name: sortable-table
253
183
  requirement: !ruby/object:Gem::Requirement
@@ -262,20 +192,6 @@ dependencies:
262
192
  - - ">="
263
193
  - !ruby/object:Gem::Version
264
194
  version: 0.1.1
265
- - !ruby/object:Gem::Dependency
266
- name: turbolinks
267
- requirement: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - ">="
270
- - !ruby/object:Gem::Version
271
- version: '0'
272
- type: :runtime
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - ">="
277
- - !ruby/object:Gem::Version
278
- version: '0'
279
195
  - !ruby/object:Gem::Dependency
280
196
  name: will_paginate
281
197
  requirement: !ruby/object:Gem::Requirement
@@ -332,7 +248,6 @@ files:
332
248
  - app/controllers/symphonia/application_controller.rb
333
249
  - app/controllers/symphonia/filters_controller.rb
334
250
  - app/controllers/symphonia/login_controller.rb
335
- - app/controllers/symphonia/roles_controller.rb
336
251
  - app/controllers/symphonia/user_sessions_controller.rb
337
252
  - app/controllers/symphonia/users_controller.rb
338
253
  - app/helpers/symphonia/application_helper.rb
@@ -344,8 +259,8 @@ files:
344
259
  - app/models/symphonia/application_record.rb
345
260
  - app/models/symphonia/email_preference.rb
346
261
  - app/models/symphonia/preference.rb
347
- - app/models/symphonia/role.rb
348
262
  - app/models/symphonia/user.rb
263
+ - app/models/symphonia/user_ability.rb
349
264
  - app/models/symphonia/user_session.rb
350
265
  - app/views/base/_form.html.erb
351
266
  - app/views/base/edit.html.erb
@@ -391,11 +306,6 @@ files:
391
306
  - app/views/symphonia/notifier/user_change_to_active.text.erb
392
307
  - app/views/symphonia/notifier/user_registered.html.erb
393
308
  - app/views/symphonia/notifier/user_registered.text.erb
394
- - app/views/symphonia/roles/_form.html.erb
395
- - app/views/symphonia/roles/edit.html.erb
396
- - app/views/symphonia/roles/index.html.erb
397
- - app/views/symphonia/roles/new.html.erb
398
- - app/views/symphonia/roles/show.html.erb
399
309
  - app/views/symphonia/users/_form.html.erb
400
310
  - app/views/symphonia/users/edit.html.erb
401
311
  - app/views/symphonia/users/edit.js.erb
@@ -407,16 +317,13 @@ files:
407
317
  - config/locales/en.yml
408
318
  - config/routes.rb
409
319
  - db/migrate/20130714140500_create_users.rb
410
- - db/migrate/20130714140501_create_roles.rb
411
320
  - db/migrate/20130714140502_create_preferences.rb
412
321
  - db/migrate/20190706130409_add_external_id_to_users.rb
413
322
  - db/migrate/20200428180001_add_uuid_to_users.rb
414
323
  - db/migrate/20200428180008_add_avatar_to_users.rb
415
- - db/migrate/20210509141420_roles_change_permissions_to_json.rb
416
- - db/migrate/20210509180525_roles_change_permissions_to_native_json.rb
417
324
  - db/seeds.rb
418
325
  - lib/generators/symphonia/entity_controller/entity_controller_generator.rb
419
- - lib/generators/symphonia/entity_controller/templates/controller.rb
326
+ - lib/generators/symphonia/entity_controller/templates/controller.rb.tt
420
327
  - lib/generators/symphonia/query/query_generator.rb
421
328
  - lib/generators/symphonia/setup/setup_generator.rb
422
329
  - lib/generators/symphonia/setup/templates/Gemfile
@@ -448,7 +355,6 @@ files:
448
355
  - lib/symphonia/model_filters/select_filter.rb
449
356
  - lib/symphonia/model_filters/string_filter.rb
450
357
  - lib/symphonia/object.rb
451
- - lib/symphonia/permissions.rb
452
358
  - lib/symphonia/query.rb
453
359
  - lib/symphonia/query_columns.rb
454
360
  - lib/symphonia/query_columns/attribute_column.rb
@@ -460,7 +366,6 @@ files:
460
366
  - spec/controllers/base_controller_spec.rb
461
367
  - spec/controllers/filters_controller_spec.rb
462
368
  - spec/controllers/login_controller_spec.rb
463
- - spec/controllers/roles_controller_spec.rb
464
369
  - spec/controllers/users_controller_spec.rb
465
370
  - spec/factories/factories.rb
466
371
  - spec/helpers/symphonia/application_helper_spec.rb
@@ -472,12 +377,10 @@ files:
472
377
  - spec/models/query/attribute_spec.rb
473
378
  - spec/models/query/filters_spec.rb
474
379
  - spec/models/query/symphonia_query_spec.rb
475
- - spec/models/role_spec.rb
476
380
  - spec/models/user_spec.rb
477
381
  - spec/rails_helper.rb
478
382
  - spec/requests/accounts_spec.rb
479
383
  - spec/requests/login_spec.rb
480
- - spec/requests/roles_spec.rb
481
384
  - spec/requests/users_spec.rb
482
385
  - spec/spec_helper.rb
483
386
  - spec/support/query.rb
@@ -491,7 +394,8 @@ files:
491
394
  homepage: https://github.com/luk4s
492
395
  licenses:
493
396
  - GPL-3.0
494
- metadata: {}
397
+ metadata:
398
+ rubygems_mfa_required: 'true'
495
399
  post_install_message: 'run: rails g symphonia:setup'
496
400
  rdoc_options: []
497
401
  require_paths:
@@ -507,41 +411,38 @@ required_rubygems_version: !ruby/object:Gem::Requirement
507
411
  - !ruby/object:Gem::Version
508
412
  version: '0'
509
413
  requirements: []
510
- rubygems_version: 3.1.4
414
+ rubygems_version: 3.3.7
511
415
  signing_key:
512
416
  specification_version: 4
513
417
  summary: My administration
514
418
  test_files:
515
- - spec/spec_helper.rb
516
- - spec/mailers/symphonia/notifier_spec.rb
419
+ - spec/controllers/account_controller_spec.rb
420
+ - spec/controllers/admin_controller_spec.rb
421
+ - spec/controllers/base_controller_spec.rb
422
+ - spec/controllers/filters_controller_spec.rb
423
+ - spec/controllers/login_controller_spec.rb
424
+ - spec/controllers/users_controller_spec.rb
425
+ - spec/factories/factories.rb
426
+ - spec/helpers/symphonia/application_helper_spec.rb
427
+ - spec/helpers/symphonia/entity_decorator_spec.rb
428
+ - spec/helpers/symphonia/renderer_helper_spec.rb
429
+ - spec/libs/some_lib_spec.rb
517
430
  - spec/mailers/previews/symphonia/notifier_preview.rb
518
- - spec/version_spec.rb
431
+ - spec/mailers/symphonia/notifier_spec.rb
519
432
  - spec/models/query/attribute_spec.rb
520
- - spec/models/query/symphonia_query_spec.rb
521
433
  - spec/models/query/filters_spec.rb
434
+ - spec/models/query/symphonia_query_spec.rb
522
435
  - spec/models/user_spec.rb
523
- - spec/models/role_spec.rb
524
- - spec/requests/roles_spec.rb
525
- - spec/requests/login_spec.rb
436
+ - spec/rails_helper.rb
526
437
  - spec/requests/accounts_spec.rb
438
+ - spec/requests/login_spec.rb
527
439
  - spec/requests/users_spec.rb
528
- - spec/libs/some_lib_spec.rb
529
- - spec/support/stub_users.rb
440
+ - spec/spec_helper.rb
441
+ - spec/support/query.rb
530
442
  - spec/support/shared.rb
531
- - spec/support/wait_for_ajax.rb
532
443
  - spec/support/shared_controllers.rb
533
444
  - spec/support/shared_requests.rb
534
- - spec/support/query.rb
535
- - spec/factories/factories.rb
536
- - spec/controllers/roles_controller_spec.rb
537
- - spec/controllers/login_controller_spec.rb
538
- - spec/controllers/users_controller_spec.rb
539
- - spec/controllers/filters_controller_spec.rb
540
- - spec/controllers/admin_controller_spec.rb
541
- - spec/controllers/account_controller_spec.rb
542
- - spec/controllers/base_controller_spec.rb
445
+ - spec/support/stub_users.rb
446
+ - spec/support/wait_for_ajax.rb
447
+ - spec/version_spec.rb
543
448
  - spec/views/filters/options.html.erb_spec.rb
544
- - spec/rails_helper.rb
545
- - spec/helpers/symphonia/application_helper_spec.rb
546
- - spec/helpers/symphonia/renderer_helper_spec.rb
547
- - spec/helpers/symphonia/entity_decorator_spec.rb
@@ -1,39 +0,0 @@
1
- module Symphonia
2
- class RolesController < ApplicationController
3
-
4
- include BaseController
5
-
6
- def model
7
- Role
8
- end
9
-
10
- def safe_attributes
11
- [:name, :description, permissions: []]
12
- end
13
- # helper Symphonia::RendererHelper
14
- #
15
- # before_action :authorize
16
- before_action :load_permissions, only: [:new, :edit, :update, :create]
17
-
18
- def create
19
- @entity = @role = Role.new(entity_params)
20
- @role.permissions = Symphonia::Permissions.find_all(params[:permissions]).map(&:name)
21
- super
22
- end
23
-
24
- def update
25
- @entity = @role = Role.find(params[:id])
26
- @role.permissions = Symphonia::Permissions.find_all(params[:permissions]).map(&:name)
27
- super
28
-
29
- end
30
-
31
- private
32
-
33
- def load_permissions
34
- @permissions = Symphonia::Permissions.all
35
- end
36
-
37
- end
38
-
39
- end
@@ -1,55 +0,0 @@
1
- module Symphonia
2
- class Role < ApplicationRecord
3
- self.table_name = 'roles'
4
-
5
- include ModelAttributes
6
-
7
- register_query do
8
- add_attribute :name, :link
9
- end
10
-
11
- validates :name, presence: true
12
-
13
- serialize :permissions, Array
14
-
15
- scope :active, -> {}
16
- scope :sorted, -> { order(:name) }
17
-
18
- # after_save :expire_cache
19
-
20
- def allowed_to?(permission)
21
- Rails.cache.fetch([self, permission]) do
22
- !allowed_permissions.detect { |i| permission.to_sym == i.name }.nil?
23
- end
24
- end
25
-
26
- def authorize?(controller, action)
27
- Rails.cache.fetch([self, controller, action]) do
28
- !allowed_permissions.detect { |p| p.allowed?(controller, action) }.nil?
29
- end
30
- end
31
-
32
- def allowed_permissions
33
- return @allowed_permissions if @allowed_permissions
34
-
35
- @allowed_permissions = permissions.collect do |i|
36
- i.is_a?(Symphonia::Permissions::Permission) ? i : Symphonia::Permissions.get(i.to_sym)
37
- end.compact
38
-
39
- @allowed_permissions
40
- end
41
-
42
- def permission_names
43
- permissions #.map(&:name)
44
- end
45
-
46
- # private
47
- #
48
- # def expire_cache
49
- # Rails.cache.delete_matched("role_#{self.id}_*")
50
- # Rails.cache.delete_matched('user_allowed_to*')
51
- # end
52
-
53
- end
54
-
55
- end
@@ -1,26 +0,0 @@
1
- <%= symphonia_form_for(@role) do |f| %>
2
-
3
- <%= f.text_field :name, required: true %>
4
- <%= f.text_area :description, size: '50x5' %>
5
-
6
- <fieldset>
7
- <legend>
8
- <%= link_to(fa_icon('check lg'), 'javascript:void(0)', onclick: "$(this).closest('fieldset').find('input:checkbox').trigger('click')", class: "pull-right") -%>
9
- <%= content_tag(:h4, Symphonia::Role.human_attribute_name(:permissions)) %>
10
- </legend>
11
- <div class="card-body row">
12
- <% @permissions.each do |perm| %>
13
- <div class="col-sm-3">
14
- <label class="checkbox-inline">
15
- <%= check_box_tag('permissions[]', perm, @role.permission_names.include?(perm.name), id: perm, class: '') %>
16
- <%= t(perm.name, :scope => [:permissions], :default => perm.to_s.humanize) %>
17
- </label>
18
- </div>
19
- <% end %>
20
- </div>
21
- </fieldset>
22
-
23
- <p class="buttons">
24
- <%= f.primary %>
25
- </p>
26
- <% end %>
@@ -1,5 +0,0 @@
1
- <%= title(t(:button_edit), @role.name) do %>
2
- <%= content_tag(:p, link_to_back, class: 'contextual') %>
3
- <% end %>
4
-
5
- <%= render(partial: 'form') %>
@@ -1,6 +0,0 @@
1
- <%= title(:label_roles) do %>
2
- <%= link_to_new_entity %>
3
- <% end %>
4
-
5
- <%= render('symphonia/common/filters', remote: true) %>
6
- <%= render_symphonia_table(@query) %>
@@ -1,4 +0,0 @@
1
- <%= title(t(:label_role_new)) do %>
2
- <%= content_tag(:p, link_to_back, class: 'contextual') %>
3
- <% end %>
4
- <%= render(partial: 'form') %>
@@ -1,11 +0,0 @@
1
- <%= title(@role.name, back: true) %>
2
-
3
- <div class="formatted-text">
4
- <%= format_text @role.description %>
5
- </div>
6
-
7
- <ul class="permissions fa-ul">
8
- <% @role.permissions.each do |perm| %>
9
- <li><%= fa_icon "li check", text: t("permissions.#{perm}", default: perm.to_s.humanize) %></li>
10
- <% end %>
11
- </ul>
@@ -1,18 +0,0 @@
1
- class CreateRoles < ActiveRecord::Migration[6.1]
2
-
3
- def up
4
- create_table :roles do |t|
5
- t.string :name, null: false
6
- t.text :description, null: true
7
-
8
- t.text :permissions
9
-
10
- t.timestamps
11
- end
12
- end
13
-
14
- def down
15
- drop_table :roles
16
- end
17
-
18
- end
@@ -1,18 +0,0 @@
1
- class RolesChangePermissionsToJson < ActiveRecord::Migration[6.1]
2
-
3
- def up
4
- say_with_time "Convert 'roles.permissions' YAML to JSON" do
5
- i = 0
6
- Symphonia::Role.where.not(permissions: nil).each do |role|
7
- yaml = product.read_attribute_before_type_cast :permissions
8
- next unless yaml.start_with? "---"
9
-
10
- role.update_columns permissions: YAML.safe_load(yaml)
11
- i += 1
12
- end
13
-
14
- i
15
- end
16
- end
17
-
18
- end
@@ -1,7 +0,0 @@
1
- class RolesChangePermissionsToNativeJson < ActiveRecord::Migration[6.1]
2
-
3
- def up
4
- change_column :roles, :permissions, :jsonb, using: 'permissions::jsonb'
5
- end
6
-
7
- end
@@ -1,93 +0,0 @@
1
- require 'rails'
2
- module Symphonia
3
- module Permissions
4
- @@mapper = []
5
- @@used_names = []
6
- mattr_accessor :mapper, :used_names
7
- class PermissionMissingError < RuntimeError; end
8
- class << self
9
-
10
- def map(&block)
11
- if block_given?
12
- yield self
13
- end
14
- end
15
-
16
- def register(name, options={})
17
- return if @@used_names.include?(name)
18
-
19
- p = Permission.new(name, options)
20
- @@used_names << p.name.to_s
21
- mapper << p
22
-
23
- p
24
- end
25
-
26
- def update(name)
27
- self.get(name) || raise(PermissionMissingError)
28
- end
29
-
30
- # Returns the permission of given name or nil if it wasn't found
31
- # Argument should be a symbol
32
- def get(name)
33
- mapper.detect{|i| i.name == name}
34
- end
35
-
36
- def all
37
- mapper
38
- end
39
-
40
- def find_all(permission_names=[])
41
- ps = used_names & Array(permission_names).compact
42
- ps.collect{|m| get(m.to_sym)}
43
- end
44
-
45
- end
46
-
47
- class Permission
48
- attr_reader :name
49
- # actions => [:controller_name => [:action, :action, :action]]
50
- def initialize(name, options={})
51
- @name = name
52
- @perms = Hash.new { |hash, key| hash[key] = Array.new }
53
- end
54
- alias_method :id, :name
55
-
56
- def to_s
57
- @name.to_s
58
- end
59
-
60
- def allowed?(controller, action)
61
- Array(@perms[controller.to_sym]).include?(action.to_sym)
62
- end
63
-
64
- def add(controller, actions=[])
65
- @perms[controller] += actions
66
- end
67
-
68
- def remove_actions(controller, actions=[])
69
- @perms[controller] -= actions
70
- end
71
-
72
- def remove_controller(controller)
73
- @perms.delete(controller)
74
- end
75
-
76
- def controllers
77
- @controllers ||= @perms.keys
78
- end
79
-
80
- def allow_action?(controller, action)
81
- controller = controller.to_sym
82
- action = action.to_sym
83
-
84
- if self.controllers.include?(controller)
85
- return @perms[controller].include?(action)
86
- else
87
- return false
88
- end
89
- end
90
- end
91
- end
92
-
93
- end
@@ -1,12 +0,0 @@
1
- # require_relative '../spec_helper.rb'
2
-
3
- module Symphonia
4
- describe RolesController, type: 'controller', logged: :admin do
5
- routes { Symphonia::Engine.routes }
6
- subject { Symphonia::Role }
7
-
8
- include_examples 'a controller actions', :role
9
-
10
- end
11
-
12
- end
@@ -1,13 +0,0 @@
1
- RSpec.describe Symphonia::Role do
2
- subject { FactoryBot.create :role, permissions: [:view_users] }
3
-
4
- describe "#allowed_to?" do
5
- it "false" do
6
- expect(subject.allowed_to?( :non_exists)).to eq false
7
- end
8
-
9
- it "true" do
10
- expect(subject.allowed_to?(:view_users)).to eq true
11
- end
12
- end
13
- end
@@ -1,10 +0,0 @@
1
- module Symphonia
2
- describe Role, logged: :admin do
3
- subject { 'role' }
4
-
5
- let(:route) { symphonia }
6
- include_examples 'a requests', :name
7
-
8
- end
9
-
10
- end