granar 0.1.1

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 (77) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +53 -0
  4. data/Rakefile +8 -0
  5. data/app/assets/config/rbac_rls_manifest.js +2 -0
  6. data/app/assets/javascripts/rbac_rls/application.js +1 -0
  7. data/app/assets/stylesheets/rbac_rls/application.css.scss +16 -0
  8. data/app/controllers/concerns/connection_rls_user_concern.rb +31 -0
  9. data/app/controllers/rbac_rls/application_controller.rb +3 -0
  10. data/app/controllers/rbac_rls/groups_controller.rb +94 -0
  11. data/app/controllers/rbac_rls/home_controller.rb +5 -0
  12. data/app/controllers/rbac_rls/permissions_controller.rb +69 -0
  13. data/app/controllers/rbac_rls/roles_controller.rb +61 -0
  14. data/app/helpers/rbac_rls/application_helper.rb +4 -0
  15. data/app/helpers/rbac_rls/groups_helper.rb +4 -0
  16. data/app/helpers/rbac_rls/permissions_helper.rb +41 -0
  17. data/app/helpers/rbac_rls/roles_helper.rb +4 -0
  18. data/app/jobs/rbac_rls/application_job.rb +4 -0
  19. data/app/mailers/rbac_rls/application_mailer.rb +6 -0
  20. data/app/models/concerns/connection_rls_concern.rb +19 -0
  21. data/app/models/rbac_rls/application_record.rb +3 -0
  22. data/app/models/rbac_rls/group.rb +14 -0
  23. data/app/models/rbac_rls/group_permission.rb +20 -0
  24. data/app/models/rbac_rls/group_user.rb +7 -0
  25. data/app/models/rbac_rls/permission.rb +68 -0
  26. data/app/models/rbac_rls/role.rb +10 -0
  27. data/app/models/rbac_rls/role_permission.rb +6 -0
  28. data/app/models/rbac_rls/user_role.rb +7 -0
  29. data/app/views/layouts/rbac_rls/application.html.erb +55 -0
  30. data/app/views/rbac_rls/groups/_form.html.erb +97 -0
  31. data/app/views/rbac_rls/groups/_group.html.erb +12 -0
  32. data/app/views/rbac_rls/groups/_group_permission_fields.html.erb +18 -0
  33. data/app/views/rbac_rls/groups/_group_user_fields.html.erb +9 -0
  34. data/app/views/rbac_rls/groups/edit.html.erb +10 -0
  35. data/app/views/rbac_rls/groups/index.html.erb +14 -0
  36. data/app/views/rbac_rls/groups/new.html.erb +9 -0
  37. data/app/views/rbac_rls/groups/show.html.erb +10 -0
  38. data/app/views/rbac_rls/home/_link_to_home_page.html.erb +3 -0
  39. data/app/views/rbac_rls/home/index.html.erb +28 -0
  40. data/app/views/rbac_rls/permissions/_form.html.erb +78 -0
  41. data/app/views/rbac_rls/permissions/_permission.html.erb +54 -0
  42. data/app/views/rbac_rls/permissions/_role_permission_fields.html.erb +9 -0
  43. data/app/views/rbac_rls/permissions/edit.html.erb +7 -0
  44. data/app/views/rbac_rls/permissions/index.html.erb +18 -0
  45. data/app/views/rbac_rls/permissions/new.html.erb +9 -0
  46. data/app/views/rbac_rls/permissions/show.html.erb +10 -0
  47. data/app/views/rbac_rls/roles/_form.html.erb +42 -0
  48. data/app/views/rbac_rls/roles/_role.html.erb +2 -0
  49. data/app/views/rbac_rls/roles/_user_role_fields.html.erb +9 -0
  50. data/app/views/rbac_rls/roles/edit.html.erb +9 -0
  51. data/app/views/rbac_rls/roles/index.html.erb +19 -0
  52. data/app/views/rbac_rls/roles/new.html.erb +8 -0
  53. data/app/views/rbac_rls/roles/show.html.erb +12 -0
  54. data/config/assets.rb +12 -0
  55. data/config/importmap.rb +9 -0
  56. data/config/routes.rb +14 -0
  57. data/config/setup.rb +0 -0
  58. data/db/migrate/20220411125339_create_rbac_rls_roles.rb +9 -0
  59. data/db/migrate/20220411125613_create_rbac_rls_user_roles.rb +9 -0
  60. data/db/migrate/20220411133054_create_rbac_rls_permissions.rb +18 -0
  61. data/db/migrate/20220425212731_create_role_permissions.rb +9 -0
  62. data/db/migrate/20220912104712_create_rbac_rls_groups.rb +10 -0
  63. data/db/migrate/20220912104929_create_rbac_rls_group_permissions.rb +12 -0
  64. data/db/migrate/20220914004802_create_rbac_rls_group_users.rb +10 -0
  65. data/db/migrate/20220914004803_create_basic_permissions_for_application_acess.rb +18 -0
  66. data/lib/generators/generator_helpers.rb +8 -0
  67. data/lib/generators/rbac_rls/custom_migration_generator.rb +78 -0
  68. data/lib/generators/rbac_rls/group_permission_generator.rb +57 -0
  69. data/lib/generators/rbac_rls/templates/group_permission_migration.rb +83 -0
  70. data/lib/generators/rbac_rls/templates/rls_migration.rb +81 -0
  71. data/lib/generators/rbac_rls/templates/rls_migration.rb.erb +64 -0
  72. data/lib/generators/rbac_rls/templates/rls_migration2.rb.erb +80 -0
  73. data/lib/rbac_rls/engine.rb +21 -0
  74. data/lib/rbac_rls/version.rb +3 -0
  75. data/lib/rbac_rls.rb +6 -0
  76. data/lib/tasks/rbac_rls_tasks.rake +4 -0
  77. metadata +178 -0
@@ -0,0 +1,55 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <%= javascript_include_tag 'rbac_rls/application' %>
5
+ <title>Rbac rls</title>
6
+ <%= csrf_meta_tags %>
7
+ <%= csp_meta_tag %>
8
+
9
+ <%= stylesheet_link_tag "rbac_rls/application", media: "all", "data-turbo-track": "reload" %>
10
+
11
+
12
+ </head>
13
+ <body style="padding-top: 5%;">
14
+ <div>
15
+ <nav class="navbar navbar-expand-xxl navbar-dark fixed-top bg-dark">
16
+ <%= link_to home_index_path, class: 'navbar-brand', remote: true do %>
17
+ Home
18
+ <% end %>
19
+ <div class="collapse navbar-collapse" id="navbarsExampleDefault">
20
+ <ul class="navbar-nav mr-auto">
21
+
22
+ <li class="nav-item">
23
+ <%= link_to roles_path, class: 'nav-link' do %>
24
+ Roles
25
+ <% end %>
26
+ </li>
27
+ <li class="nav-item">
28
+ <%= link_to permissions_path, class: 'nav-link' do %>
29
+ permissions
30
+ <% end %>
31
+ </li>
32
+ <li class="nav-item">
33
+ <%= link_to groups_path, class: 'nav-link' do %>
34
+ Groups
35
+ <% end %>
36
+ </li>
37
+ <li>
38
+ <%= link_to '/', class: 'nav-link' do %>
39
+ Main Application
40
+ <% end %>
41
+ </li>
42
+ </ul>
43
+ </div>
44
+ </nav>
45
+ </div>
46
+ <div class="container">
47
+ <%= yield %>
48
+ </div>
49
+ </body>
50
+ <footer class="container">
51
+ <hr>
52
+ <p>BCC IFG 2022</p>
53
+ </footer>
54
+ </html>
55
+ <!--<script> alert('hellow')</script>-->
@@ -0,0 +1,97 @@
1
+ <%= form_with(model: group) do |form| %>
2
+ <% if group.errors.any? %>
3
+ <div style="color: red">
4
+ <h2><%= pluralize(group.errors.count, "error") %> prohibited this group from being saved:</h2>
5
+
6
+ <ul>
7
+ <% group.errors.each do |error| %>
8
+ <li><%= error.full_message %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div>
15
+ <%= form.label :name, style: "display: block" %>
16
+ <%= form.text_field :name %>
17
+ </div>
18
+
19
+ <div>
20
+ <%= form.label :comments, style: "display: block" %>
21
+ <%= form.text_field :comments %>
22
+ </div>
23
+ <div class="m-2">
24
+ <%= link_to_add_nested(form, :group_permissions, '#group_permissions',
25
+ partial: 'rbac_rls/groups/group_permission_fields',
26
+ link_text: 'Add new Permission to this Group Permission',
27
+ link_classes: 'btn-primary btn-sm') %>
28
+ </div>
29
+ <div id='group_permissions'>
30
+ <%= form.fields_for :group_permissions do |p| %>
31
+ <% render 'rbac_rls/groups/group_permission_fields', form: p %>
32
+ <% end %>
33
+ </div>
34
+
35
+ <div class="m-2">
36
+ <%= link_to_add_nested(form, :group_users, '#group_users',
37
+ partial: 'rbac_rls/groups/group_user_fields',
38
+ link_text: 'Add new User to this Group User',
39
+ link_classes: 'btn-primary btn-sm') %>
40
+ </div>
41
+ <div id='group_users'>
42
+ <%= form.fields_for :group_users do |p| %>
43
+ <% render 'rbac_rls/groups/group_user_fields', form: p %>
44
+ <% end %>
45
+ </div>
46
+
47
+ <div>
48
+ <%= form.submit %>
49
+ </div>
50
+
51
+ <% end %>
52
+ <script>
53
+
54
+ function popular_select(elementId, targetSelect) {
55
+ let permission_id = document.getElementById(elementId).value
56
+ let relatedId = document.getElementById(elementId).dataset.relatedId
57
+ if (permission_id.toString() === '') {
58
+ let selectList = document.getElementById(`${targetSelect}_${relatedId}`)
59
+ selectList.innerHTML = ""
60
+ return false
61
+ }
62
+
63
+ let url = new URL('<%= request.base_url + get_options_select_groups_path(format: :json) %>')
64
+ let params = {
65
+ permission_object_id: document.getElementById(`permission_id_${relatedId}`).value,
66
+ permission_id: permission_id,
67
+ target_select: targetSelect
68
+ }
69
+
70
+ url.search = new URLSearchParams(params).toString();
71
+
72
+ fetch(url)
73
+ .then(response => response.json())
74
+ .then(data => {
75
+ appendSelect(elementId, data, targetSelect)
76
+ }
77
+ );
78
+ return true
79
+ }
80
+
81
+
82
+ function appendSelect(select_id, options, targetSelect) {
83
+ let relatedId = document.getElementById(select_id).dataset.relatedId
84
+
85
+ let selectList = document.getElementById(`${targetSelect}_${relatedId}`)
86
+
87
+
88
+ options = Object.entries(options)
89
+ selectList.innerHTML = ""
90
+ for (let i = 0; i < options.length; i++) {
91
+ let option = document.createElement("option")
92
+ option.value = options[i][1]
93
+ option.text = options[i][0]
94
+ selectList.appendChild(option)
95
+ }
96
+ }
97
+ </script>
@@ -0,0 +1,12 @@
1
+ <div id="<%= dom_id group %>">
2
+ <p>
3
+ <strong>Name:</strong>
4
+ <%= group.name %>
5
+ </p>
6
+
7
+ <p>
8
+ <strong>Comments:</strong>
9
+ <%= group.comments %>
10
+ </p>
11
+
12
+ </div>
@@ -0,0 +1,18 @@
1
+ <% utc = Time.now.utc.to_formatted_s(:number) %>
2
+ <div class="wrapper-div m-2">
3
+ <div class="">
4
+ <%= link_to_remove_nested(form, fields_wrapper_selector: '.wrapper-div', link_classes: 'btn-danger btn-sm') %>
5
+ </div>
6
+ <div class="">
7
+ <%= form.label :permission_id %> <br>
8
+ <%= form.select(:permission_id, permission_options_for_select(form), { :prompt => "...", include_blank: true }, onchange: "popular_select(this.id,'table_key_id')", id: "permission_id_#{utc}", data: { related_id: utc }, class: 'form-control') %>
9
+ </div>
10
+ <div class="">
11
+ <%= form.label :table_key %> <br>
12
+ <%= form.select(:table_key, table_selected_key_options_for_select(form), { :prompt => "...", include_blank: true }, onchange: "popular_select(this.id,'table_value_id')", id: "table_key_id_#{utc}", data: { related_id: utc }, class: 'form-control') %>
13
+ </div>
14
+ <div class="">
15
+ <%= form.label :table_value %> <br>
16
+ <%= form.text_field :table_value %>
17
+ </div>
18
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="wrapper-div m-2">
2
+ <div class="">
3
+ <%= link_to_remove_nested(form, fields_wrapper_selector: '.wrapper-div', link_classes: 'btn-danger btn-sm') %>
4
+ </div>
5
+ <div class="">
6
+ <%= form.label :user_id %> <br>
7
+ <%= form.select(:user_id, user_options_for_select(form), { :prompt => "...", include_blank: true }, class: 'form-control') %>
8
+ </div>
9
+ </div>
@@ -0,0 +1,10 @@
1
+ <h1>Editing group</h1>
2
+
3
+ <%= render "form", group: @group %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Show this group", @group %> |
9
+ <%= link_to "Back to groups", groups_path %>
10
+ </div>
@@ -0,0 +1,14 @@
1
+ <p style="color: green"><%= notice %></p>
2
+
3
+ <h1>Groups</h1>
4
+
5
+ <div id="groups">
6
+ <% @groups.each do |group| %>
7
+ <%= render group %>
8
+ <p>
9
+ <%= link_to "Show this group", group %>
10
+ </p>
11
+ <% end %>
12
+ </div>
13
+
14
+ <%= link_to "New group", new_group_path %>
@@ -0,0 +1,9 @@
1
+ <h1>New group</h1>
2
+
3
+ <%= render "form", group: @group %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Back to groups", groups_path %>
9
+ </div>
@@ -0,0 +1,10 @@
1
+ <p style="color: green"><%= notice %></p>
2
+
3
+ <%= render @group %>
4
+
5
+ <div>
6
+ <%= link_to "Edit this group", edit_group_path(@group) %> |
7
+ <%= link_to "Back to groups", groups_path %>
8
+
9
+ <%= button_to "Destroy this group", @group, method: :delete %>
10
+ </div>
@@ -0,0 +1,3 @@
1
+ <%= link_to rbac_rls_path, class: class_link do %>
2
+ RBAC RLS
3
+ <% end %>
@@ -0,0 +1,28 @@
1
+ <div role="main">
2
+ <div class="jumbotron">
3
+ <div class="container">
4
+ <h1 class="display-3">RBAC RLS GEM <i class="fas fa-gem"></i></h1>
5
+ <p>This is a GEM based on RBAC and RLS, to control users' access to information</p>
6
+ </div>
7
+ <hr>
8
+ </div>
9
+ <div class="container">
10
+ <div class="row">
11
+ <div class="col-md-5">
12
+ <h2>RBAC (ROLE BASED ACCESS CONTROL)</h2>
13
+ <p>Role-based access control (RBAC) is a method of restricting network access based on the roles of individual
14
+ users within an enterprise. RBAC ensures employees access only information
15
+ they need to do their jobs and prevents them from accessing information that doesn't pertain to them. </p>
16
+ </div>
17
+ <div class="col-md-5">
18
+ <h2>RLS(ROW LEVEL SECURITY)</h2>
19
+ <p> Row-Level Security enables you to use group membership or execution context to control access to rows in a
20
+ database table.
21
+ Row-Level Security (RLS) simplifies
22
+ the design and coding of security in your application. RLS helps you implement restrictions on data row
23
+ access.</p>
24
+ </div>
25
+ </div>
26
+ <hr>
27
+ </div>
28
+ </div>
@@ -0,0 +1,78 @@
1
+ <div class="w-75 container">
2
+ <%= form_with(model: permission) do |form| %>
3
+ <% if permission.errors.any? %>
4
+ <div style="color: red">
5
+ <h2><%= pluralize(permission.errors.count, "error") %> prohibited this permission from being saved:</h2>
6
+
7
+ <ul>
8
+ <% permission.errors.each do |error| %>
9
+ <li><%= error.full_message %></li>
10
+ <% end %>
11
+ </ul>
12
+ </div>
13
+ <% end %>
14
+
15
+ <div class="m-2">
16
+ <%= form.label :table_name %> <br>
17
+ <%= form.select(:table_name, table_name_options_for_select(form), {}, { class: 'form-control' }) %>
18
+ </div>
19
+
20
+ <div class="row m-2">
21
+ <div class="col-md-1">
22
+ <%= form.label :read, style: "display: block" %>
23
+ <%= form.check_box :read %>
24
+ </div>
25
+
26
+ <div class="col-md-1">
27
+ <%= form.label :write, style: "display: block" %>
28
+ <%= form.check_box :write %>
29
+ </div>
30
+
31
+ <div class="col-md-1">
32
+ <%= form.label :change, style: "display: block" %>
33
+ <%= form.check_box :change %>
34
+ </div>
35
+
36
+ <div class="col-md-1">
37
+ <%= form.label :remove, style: "display: block" %>
38
+ <%= form.check_box :remove %>
39
+ </div>
40
+ </div>
41
+ <hr>
42
+ <div class="row m-2">
43
+ <div class="col-md-1">
44
+ <%= form.label :owner_read, style: "display: block" %>
45
+ <%= form.check_box :owner_read %>
46
+ </div>
47
+
48
+ <div class="col-md-1">
49
+ <%= form.label :owner_change, style: "display: block" %>
50
+ <%= form.check_box :owner_change %>
51
+ </div>
52
+
53
+ <div class="col-md-1">
54
+ <%= form.label :owner_remove, style: "display: block" %>
55
+ <%= form.check_box :owner_remove %>
56
+ </div>
57
+ </div>
58
+
59
+ <div class="">
60
+ <%= form.label :permission_id %> <br>
61
+ <%= form.select(:permission_id, permission_options_for_select(form), { :prompt => "...", include_blank: true }, class: 'form-control') %>
62
+ </div>
63
+ <div class="m-2">
64
+ <%= link_to_add_nested(form, :role_permissions, '#roles_permission',
65
+ partial: 'rbac_rls/permissions/role_permission_fields',
66
+ link_text: 'Add new User to this Role Permission',
67
+ link_classes: 'btn-primary btn-sm') %>
68
+ </div>
69
+ <div id='roles_permission'>
70
+ <%= form.fields_for :role_permissions do |p| %>
71
+ <% render 'rbac_rls/permissions/role_permission_fields', form: p %>
72
+ <% end %>
73
+ </div>
74
+ <div class="m-2">
75
+ <%= form.submit %>
76
+ </div>
77
+ <% end %>
78
+ </div>
@@ -0,0 +1,54 @@
1
+ <div id="<%= dom_id permission %>">
2
+ <p>
3
+ <strong>Name:</strong>
4
+ <%= permission.name %>
5
+ </p>
6
+
7
+ <p>
8
+ <strong>Table name:</strong>
9
+ <%= permission.table_name %>
10
+ </p>
11
+
12
+ <p>
13
+ <strong>Read:</strong>
14
+ <%= permission.read %>
15
+ </p>
16
+
17
+ <p>
18
+ <strong>Write:</strong>
19
+ <%= permission.write %>
20
+ </p>
21
+
22
+ <p>
23
+ <strong>Update:</strong>
24
+ <%= permission.change %>
25
+ </p>
26
+
27
+ <p>
28
+ <strong>Delete:</strong>
29
+ <%= permission.remove %>
30
+ </p>
31
+
32
+ <p>
33
+ <strong>Permission:</strong>
34
+ <%= permission.permission_id %>
35
+ </p>
36
+ <p>
37
+ <strong>
38
+ owner_read
39
+ </strong>
40
+ <%= permission.owner_read %>
41
+ </p>
42
+ <p>
43
+ <strong>
44
+ owner_change
45
+ </strong>
46
+ <%= permission.owner_change %>
47
+ </p>
48
+ <p>
49
+ <strong>
50
+ owner_remove
51
+ </strong>
52
+ <%= permission.owner_remove %>
53
+ </p>
54
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="wrapper-div m-2">
2
+ <div class="">
3
+ <%= link_to_remove_nested(form, fields_wrapper_selector: '.wrapper-div', link_classes: 'btn-danger btn-sm') %>
4
+ </div>
5
+ <div class="">
6
+ <%= form.label :role_id %> <br>
7
+ <%= form.select(:role_id, role_options_for_select(form), { :prompt => "...", include_blank: true }, class: 'form-control') %>
8
+ </div>
9
+ </div>
@@ -0,0 +1,7 @@
1
+ <h1>Editing permission</h1>
2
+ <%= render "form", permission: @permission %>
3
+ <br>
4
+ <div>
5
+ <%= link_to "Show this permission", @permission, class: 'btn btn-secondary' %> |
6
+ <%= link_to "Back to permissions", permission_path, class: 'btn btn-secondary' %>
7
+ </div>
@@ -0,0 +1,18 @@
1
+ <p style="color: green"><%= notice %></p>
2
+
3
+ <h1 class="display-3">Permissions</h1>
4
+
5
+ <div class="">
6
+ <%= link_to new_permission_path, class: 'btn-primary btn-sm' do %>
7
+ New permission
8
+ <% end %>
9
+ </div>
10
+
11
+ <div id="permissions">
12
+ <% @permissions.each do |permission| %>
13
+ <%= render permission %>
14
+ <p>
15
+ <%= link_to "Show this permission", permission,class: 'btn btn-secondary'%>
16
+ </p>
17
+ <% end %>
18
+ </div>
@@ -0,0 +1,9 @@
1
+ <h1>New permission</h1>
2
+
3
+ <%= render "form", permission: @permission %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Back to permissions", permissions_path, class: 'btn btn-secondary' %>
9
+ </div>
@@ -0,0 +1,10 @@
1
+ <p style="color: green"><%= notice %></p>
2
+
3
+ <%= render @permission %>
4
+
5
+ <div>
6
+ <%= link_to "Edit this permission", edit_permission_path(@permission) %> |
7
+ <%= link_to "Back to permissions", permissions_path %>
8
+
9
+ <%= button_to "Destroy this permission", @permission, method: :delete %>
10
+ </div>
@@ -0,0 +1,42 @@
1
+ <div class="container">
2
+ <%= form_with(model: role) do |form| %>
3
+ <% if role.errors.any? %>
4
+ <div style="color: red">
5
+ <h2><%= pluralize(role.errors.count, "error") %> prohibited this role from being saved:</h2>
6
+
7
+ <ul>
8
+ <% role.errors.each do |error| %>
9
+ <li><%= error.full_message %></li>
10
+ <% end %>
11
+ </ul>
12
+ </div>
13
+ <% end %>
14
+
15
+ <div>
16
+ <%= form.label :name, style: "display: block" %>
17
+ <%= form.text_field :name, class: 'form-control' %>
18
+ </div>
19
+
20
+ <div>
21
+ <%= form.label :comments, style: "display: block" %>
22
+ <%= form.text_area :comments, class: 'form-control' %>
23
+ </div>
24
+
25
+
26
+ <div id='user_roles'>
27
+ <%= form.fields_for :user_roles do |p| %>
28
+ <% render 'rbac_rls/roles/user_role_fields', form: p %>
29
+ <% end %>
30
+ </div>
31
+ <div class="m-2">
32
+ <%= link_to_add_nested(form, :user_roles, '#user_roles',
33
+ partial: 'rbac_rls/roles/user_role_fields',
34
+ link_text: 'Add new User to role',
35
+ link_classes: 'btn-primary btn-sm') %>
36
+ </div>
37
+
38
+ <div class="m-2">
39
+ <%= form.submit "Create Role", class: 'btn-primary btn-sm' %>
40
+ </div>
41
+ <% end %>
42
+ </div>
@@ -0,0 +1,2 @@
1
+ <li class="list-group-item"><strong>Name:</strong> <%= link_to "#{role.name}", role %></li>
2
+ <li class="list-group-item"><strong>Comments:</strong> <%= role.comments %> </li>
@@ -0,0 +1,9 @@
1
+ <div class="wrapper-div m-2">
2
+ <div class="">
3
+ <%= link_to_remove_nested(form, fields_wrapper_selector: '.wrapper-div', link_classes: 'btn-danger btn-sm') %>
4
+ </div>
5
+ <div class="">
6
+ <%= form.label :user_id %> <br>
7
+ <%= form.select(:user_id, user_options_for_select(form), { :prompt => "...", include_blank: true }, class: 'form-control') %>
8
+ </div>
9
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="container">
2
+ <h1>Editing role</h1>
3
+ <%= link_to "Show this role", @role, class: 'btn-primary btn-sm' %>
4
+ <%= link_to "Back to roles", roles_path, class: 'btn-danger btn-sm' %>
5
+ <div class="container w-75">
6
+ <%= render "form", role: @role %>
7
+ </div>
8
+
9
+ </div>
@@ -0,0 +1,19 @@
1
+ <div class="container">
2
+ <p style="color: green"><%= notice %></p>
3
+
4
+ <h1 class="display-3">Roles</h1>
5
+
6
+ <div class="">
7
+ <%= link_to new_role_path, class: 'btn-primary btn-sm' do %>
8
+ New Role
9
+ <% end %>
10
+ </div>
11
+
12
+ <div id="roles" class="w-75 container">
13
+ <% @roles.each do |role| %>
14
+ <ul class="list-group mb-2">
15
+ <%= render role %>
16
+ </ul>
17
+ <% end %>
18
+ </div>
19
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="container">
2
+ <h1 class="display-3">New role</h1>
3
+ <div>
4
+ <%= link_to "Back to roles", roles_path, class: 'btn-danger btn-sm' %>
5
+ </div>
6
+
7
+ <%= render "form", role: @role %>
8
+ </div>
@@ -0,0 +1,12 @@
1
+ <div class="container">
2
+ <p style="color: green"><%= notice %></p>
3
+ <%= link_to "Edit this role", edit_role_path(@role), class: 'btn-primary btn-sm' %>
4
+ <%= link_to "Back to roles", roles_path, class: 'btn-danger btn-sm' %>
5
+
6
+
7
+ <div class="w-75 m-2">
8
+ <%= render @role %>
9
+ </div>
10
+
11
+ <%= button_to "Destroy this role", @role, method: :delete, class: 'btn-danger btn-sm', data: { confirm: "Are you sure?" } %>
12
+ </div>
data/config/assets.rb ADDED
@@ -0,0 +1,12 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Version of your assets, change this if you want to expire all your assets.
4
+ # Rails.application.config.assets.version = "1.0"
5
+
6
+ # Add additional assets to the asset load path.
7
+ # Rails.application.config.assets.paths << Emoji.images_path
8
+
9
+ # Precompile additional assets.
10
+ # application.js, application.css, and all non-JS/CSS in the app/assets
11
+ # folder are already added.
12
+ Rails.application.config.assets.precompile += %w( application.js, application.css )
@@ -0,0 +1,9 @@
1
+ # Pin npm packages by running ./bin/importmap
2
+
3
+ pin "application", preload: true
4
+ # pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
5
+ # pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true
6
+ # pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
7
+ # pin_all_from "app/javascript/controllers", under: "controllers"
8
+ #
9
+ pin "vanilla-nested", to: "vanilla_nested.js", preload: true
data/config/routes.rb ADDED
@@ -0,0 +1,14 @@
1
+ RbacRls::Engine.routes.draw do
2
+
3
+ root 'home#index'
4
+ resources :home, only: [:index], path: :rbac_rls_home_page
5
+ resources :permissions
6
+ resources :roles
7
+
8
+ resources :groups do
9
+ collection do
10
+ get :get_options_select
11
+ end
12
+ end
13
+ # end
14
+ end
data/config/setup.rb ADDED
File without changes
@@ -0,0 +1,9 @@
1
+ class CreateRbacRlsRoles < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :roles do |t|
4
+ t.string :name, limit: 30
5
+ t.string :comments, limit: 255
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class CreateRbacRlsUserRoles < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :user_roles do |t|
4
+ t.references :user, null: false, foreign_key: true
5
+ t.references :role, null: false, foreign_key: true
6
+ t.timestamps
7
+ end
8
+ end
9
+ end