rbac 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/CODE_OF_CONDUCT.md +49 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +85 -0
  7. data/Rakefile +2 -0
  8. data/app/helpers/rbac/application_helper.rb +20 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/config/routes.rb +7 -0
  12. data/images/user_form.png +0 -0
  13. data/lib/generators/rbac/create/create_generator.rb +33 -0
  14. data/lib/generators/rbac/create/templates/controllers/rbac/groups_controller.rb +81 -0
  15. data/lib/generators/rbac/create/templates/controllers/rbac/privileges_controller.rb +76 -0
  16. data/lib/generators/rbac/create/templates/controllers/rbac/roles_controller.rb +81 -0
  17. data/lib/generators/rbac/create/templates/models/rbac/group.rb +11 -0
  18. data/lib/generators/rbac/create/templates/models/rbac/group_privilege.rb +6 -0
  19. data/lib/generators/rbac/create/templates/models/rbac/group_role.rb +6 -0
  20. data/lib/generators/rbac/create/templates/models/rbac/privilege.rb +7 -0
  21. data/lib/generators/rbac/create/templates/models/rbac/role.rb +11 -0
  22. data/lib/generators/rbac/create/templates/models/rbac/role_user.rb +6 -0
  23. data/lib/generators/rbac/create/templates/views/rbac/groups/_form.html.erb +35 -0
  24. data/lib/generators/rbac/create/templates/views/rbac/groups/_privilege_fields.html.erb +27 -0
  25. data/lib/generators/rbac/create/templates/views/rbac/groups/edit.html.erb +6 -0
  26. data/lib/generators/rbac/create/templates/views/rbac/groups/index.html.erb +31 -0
  27. data/lib/generators/rbac/create/templates/views/rbac/groups/index.json.jbuilder +4 -0
  28. data/lib/generators/rbac/create/templates/views/rbac/groups/new.html.erb +6 -0
  29. data/lib/generators/rbac/create/templates/views/rbac/groups/show.html.erb +19 -0
  30. data/lib/generators/rbac/create/templates/views/rbac/groups/show.json.jbuilder +1 -0
  31. data/lib/generators/rbac/create/templates/views/rbac/privileges/_form.html.erb +39 -0
  32. data/lib/generators/rbac/create/templates/views/rbac/privileges/edit.html.erb +6 -0
  33. data/lib/generators/rbac/create/templates/views/rbac/privileges/index.html.erb +35 -0
  34. data/lib/generators/rbac/create/templates/views/rbac/privileges/index.json.jbuilder +4 -0
  35. data/lib/generators/rbac/create/templates/views/rbac/privileges/new.html.erb +6 -0
  36. data/lib/generators/rbac/create/templates/views/rbac/privileges/show.html.erb +29 -0
  37. data/lib/generators/rbac/create/templates/views/rbac/privileges/show.json.jbuilder +1 -0
  38. data/lib/generators/rbac/create/templates/views/rbac/roles/_form.html.erb +35 -0
  39. data/lib/generators/rbac/create/templates/views/rbac/roles/_group_fields.html.erb +29 -0
  40. data/lib/generators/rbac/create/templates/views/rbac/roles/edit.html.erb +6 -0
  41. data/lib/generators/rbac/create/templates/views/rbac/roles/index.html.erb +31 -0
  42. data/lib/generators/rbac/create/templates/views/rbac/roles/index.json.jbuilder +4 -0
  43. data/lib/generators/rbac/create/templates/views/rbac/roles/new.html.erb +6 -0
  44. data/lib/generators/rbac/create/templates/views/rbac/roles/show.html.erb +19 -0
  45. data/lib/generators/rbac/create/templates/views/rbac/roles/show.json.jbuilder +1 -0
  46. data/lib/generators/rbac/migration/migration_generator.rb +32 -0
  47. data/lib/generators/rbac/migration/templates/create_group_privileges.rb +8 -0
  48. data/lib/generators/rbac/migration/templates/create_group_roles.rb +8 -0
  49. data/lib/generators/rbac/migration/templates/create_groups.rb +11 -0
  50. data/lib/generators/rbac/migration/templates/create_privileges.rb +13 -0
  51. data/lib/generators/rbac/migration/templates/create_role_users.rb +8 -0
  52. data/lib/generators/rbac/migration/templates/create_roles.rb +11 -0
  53. data/lib/generators/rbac/migration/templates/create_users.rb +12 -0
  54. data/lib/rbac.rb +7 -0
  55. data/lib/rbac/engine.rb +4 -0
  56. data/lib/rbac/version.rb +3 -0
  57. data/rbac.gemspec +24 -0
  58. metadata +129 -0
@@ -0,0 +1,11 @@
1
+ module Rbac
2
+ class Group < ActiveRecord::Base
3
+ # Group - role many-to-many relationship
4
+ has_many :roles, :through => :group_role
5
+ has_many :group_role, dependent: :delete_all
6
+
7
+ # Group - privilege many-to-many relationship
8
+ has_many :privileges, :through => :group_privilege
9
+ has_many :group_privilege, dependent: :delete_all
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ module Rbac
2
+ class GroupPrivilege < ActiveRecord::Base
3
+ belongs_to :group
4
+ belongs_to :privilege
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Rbac
2
+ class GroupRole < ActiveRecord::Base
3
+ belongs_to :role
4
+ belongs_to :group
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ module Rbac
2
+ class Privilege < ActiveRecord::Base
3
+ # Privilege - group many-to-many relationship
4
+ has_many :groups, :through => :group_privilege
5
+ has_many :group_privilege, dependent: :delete_all
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module Rbac
2
+ class Role < ActiveRecord::Base
3
+ # User - user many-to-many relationship
4
+ has_many :users, :through => :role_user, class_name: 'User'
5
+ has_many :role_user, dependent: :delete_all, class_name: 'Rbac::RoleUser'
6
+
7
+ # Group - role many-to-many relationship
8
+ has_many :groups, :through => :group_role
9
+ has_many :group_role, dependent: :delete_all
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ module Rbac
2
+ class RoleUser < ActiveRecord::Base
3
+ belongs_to :role, class_name: 'Rbac::Role'
4
+ belongs_to :user, class_name: 'User'
5
+ end
6
+ end
@@ -0,0 +1,35 @@
1
+ <%= form_for(@group) do |f| %>
2
+ <% if @group.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@group.errors.count, "error") %> prohibited this group from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @group.errors.full_messages.each do |message| %>
8
+ <li><%= message %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div>
15
+ <%= f.label :name %><br/>
16
+ <%= f.text_field :name %>
17
+ </div>
18
+ <div>
19
+ <%= f.label :description %><br/>
20
+ <%= f.text_area :description %>
21
+ </div>
22
+ <div>
23
+ <%= f.label :privileges %><br/>
24
+ <%= render "privilege_fields" %>
25
+ </div>
26
+ <div>
27
+ <label>
28
+ <%= f.check_box :is_active %>Is active
29
+ </label>
30
+ </div>
31
+ <div>
32
+ <%= f.submit "Submit" %>
33
+ <%= link_to 'Back', rbac_groups_path %>
34
+ </div>
35
+ <% end %>
@@ -0,0 +1,27 @@
1
+ <% @privileges.each do |privilege| %>
2
+ <% @flag = false %>
3
+ <% if action_name == "edit" %>
4
+ <!-- #TODO refactor -->
5
+ <% @group_privileges.each do |group_privilege|
6
+ if group_privilege.id == privilege.id
7
+ @flag = true
8
+ break
9
+ else
10
+ @flag = false
11
+ end
12
+ end %>
13
+ <% end %>
14
+
15
+ <% if @flag %>
16
+ <label>
17
+ <%= check_box_tag 'privilege_ids[]', privilege.id , :checked => "checked" %>
18
+ <%= h privilege.name %>
19
+ </label>
20
+ <% else %>
21
+ <label>
22
+ <%= check_box_tag 'privilege_ids[]', privilege.id %>
23
+ <%= h privilege.name %>
24
+ </label>
25
+ <% end %>
26
+ <% end %>
27
+ <br/>
@@ -0,0 +1,6 @@
1
+ <div>
2
+ <h3>Update group</h3>
3
+ </div>
4
+ <div>
5
+ <%= render 'form' %>
6
+ </div>
@@ -0,0 +1,31 @@
1
+ <div>
2
+ <h3>Groups</h3>
3
+ </div>
4
+ <div>
5
+ <table>
6
+ <thead>
7
+ <tr>
8
+ <th>Name</th>
9
+ <th>Description</th>
10
+ <th>Is active</th>
11
+ <th colspan="3">Action</th>
12
+ </tr>
13
+ </thead>
14
+
15
+ <tbody>
16
+ <% @groups.each do |group| %>
17
+ <tr>
18
+ <td><%= group.name %></td>
19
+ <td><%= group.description %></td>
20
+ <td><%= group.is_active %></td>
21
+ <td>
22
+ <%= link_to 'Show', group %>
23
+ <%= link_to 'Edit', edit_rbac_group_path(group) %>
24
+ <%= link_to 'Delete', group, method: :delete, data: { confirm: 'Are you sure?' } %>
25
+ </td>
26
+ </tr>
27
+ <% end %>
28
+ </tbody>
29
+ </table>
30
+ <%= link_to 'New group', new_rbac_group_path %>
31
+ </div>
@@ -0,0 +1,4 @@
1
+ json.array!(@groups) do |group|
2
+ json.extract! group, :id, :name, :description, :is_active
3
+ json.url group_url(group, format: :json)
4
+ end
@@ -0,0 +1,6 @@
1
+ <div>
2
+ <h3>New group</h3>
3
+ </div>
4
+ <div>
5
+ <%= render 'form' %>
6
+ </div>
@@ -0,0 +1,19 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <p>
4
+ <strong>Name:</strong>
5
+ <%= @group.name %>
6
+ </p>
7
+
8
+ <p>
9
+ <strong>Description:</strong>
10
+ <%= @group.description %>
11
+ </p>
12
+
13
+ <p>
14
+ <strong>Is active:</strong>
15
+ <%= @group.is_active %>
16
+ </p>
17
+
18
+ <%= link_to 'Edit', edit_rbac_group_path(@group) %> |
19
+ <%= link_to 'Back', rbac_groups_path %>
@@ -0,0 +1 @@
1
+ json.extract! @group, :id, :name, :description, :is_active, :created_at, :updated_at
@@ -0,0 +1,39 @@
1
+ <%= form_for(@privilege) do |f| %>
2
+ <% if @privilege.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@privilege.errors.count, "error") %> prohibited this privilege from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @privilege.errors.full_messages.each do |message| %>
8
+ <li><%= message %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div>
15
+ <%= f.label :name %><br>
16
+ <%= f.text_field :name %>
17
+ </div>
18
+ <div>
19
+ <%= f.label :description %><br>
20
+ <%= f.text_area :description %>
21
+ </div>
22
+ <div>
23
+ <%= f.label :controller %><br>
24
+ <%= f.text_field :controller %>
25
+ </div>
26
+ <div>
27
+ <%= f.label :action %><br>
28
+ <%= f.text_field :action %>
29
+ </div>
30
+ <div>
31
+ <label>
32
+ <%= f.check_box :is_active %>Is active
33
+ </label>
34
+ </div>
35
+ <div>
36
+ <%= f.submit "Submit" %>
37
+ <%= link_to 'Back', rbac_privileges_path %>
38
+ </div>
39
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <div>
2
+ <h3>Update privilege</h3>
3
+ </div>
4
+ <div>
5
+ <%= render 'form' %>
6
+ </div>
@@ -0,0 +1,35 @@
1
+ <div>
2
+ <h3>Privileges</h3>
3
+ </div>
4
+ <div>
5
+ <table>
6
+ <thead>
7
+ <tr>
8
+ <th>Name</th>
9
+ <th>Description</th>
10
+ <th>Controller</th>
11
+ <th>Action</th>
12
+ <th>Is active</th>
13
+ <th colspan="3">Action</th>
14
+ </tr>
15
+ </thead>
16
+
17
+ <tbody>
18
+ <% @privileges.each do |privilege| %>
19
+ <tr>
20
+ <td><%= privilege.name %></td>
21
+ <td><%= privilege.description %></td>
22
+ <td><%= privilege.controller %></td>
23
+ <td><%= privilege.action %></td>
24
+ <td><%= privilege.is_active %></td>
25
+ <td>
26
+ <%= link_to 'Show', privilege %>
27
+ <%= link_to 'Edit', edit_rbac_privilege_path(privilege) %>
28
+ <%= link_to 'Delete', privilege, method: :delete, data: { confirm: 'Are you sure?' } %>
29
+ </td>
30
+ </tr>
31
+ <% end %>
32
+ </tbody>
33
+ </table>
34
+ <%= link_to 'New privilege', new_rbac_privilege_path %>
35
+ </div>
@@ -0,0 +1,4 @@
1
+ json.array!(@privileges) do |privilege|
2
+ json.extract! privilege, :id, :name, :description, :controller, :action, :is_active
3
+ json.url privilege_url(privilege, format: :json)
4
+ end
@@ -0,0 +1,6 @@
1
+ <div>
2
+ <h3>New privilege</h3>
3
+ </div>
4
+ <div>
5
+ <%= render 'form' %>
6
+ </div>
@@ -0,0 +1,29 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <p>
4
+ <strong>Name:</strong>
5
+ <%= @privilege.name %>
6
+ </p>
7
+
8
+ <p>
9
+ <strong>Description:</strong>
10
+ <%= @privilege.description %>
11
+ </p>
12
+
13
+ <p>
14
+ <strong>Controller:</strong>
15
+ <%= @privilege.controller %>
16
+ </p>
17
+
18
+ <p>
19
+ <strong>Action:</strong>
20
+ <%= @privilege.action %>
21
+ </p>
22
+
23
+ <p>
24
+ <strong>Is active:</strong>
25
+ <%= @privilege.is_active %>
26
+ </p>
27
+
28
+ <%= link_to 'Edit', edit_rbac_privilege_path(@privilege) %> |
29
+ <%= link_to 'Back', rbac_privileges_path %>
@@ -0,0 +1 @@
1
+ json.extract! @privilege, :id, :name, :description, :controller, :action, :is_active, :created_at, :updated_at
@@ -0,0 +1,35 @@
1
+ <%= form_for(@role) do |f| %>
2
+ <% if @role.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@role.errors.count, "error") %> prohibited this role from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @role.errors.full_messages.each do |message| %>
8
+ <li><%= message %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div>
15
+ <%= f.label :role_name %><br>
16
+ <%= f.text_field :role_name %>
17
+ </div>
18
+ <div>
19
+ <%= f.label :role_description %><br>
20
+ <%= f.text_area :role_description %>
21
+ </div>
22
+ <div>
23
+ <%= f.label :groups %><br/>
24
+ <%= render "group_fields" %>
25
+ </div>
26
+ <div>
27
+ <label>
28
+ <%= f.check_box :is_active %>Is active
29
+ </label>
30
+ </div>
31
+ <div>
32
+ <%= f.submit "Submit" %>
33
+ <%= link_to 'Back', rbac_roles_path %>
34
+ </div>
35
+ <% end %>
@@ -0,0 +1,29 @@
1
+ <% @groups.each do |group| %>
2
+ <% @flag = false %>
3
+ <% if action_name == "edit" %>
4
+ <!-- #TODO refactor -->
5
+ <% @role_groups.each do |role_group|
6
+ if role_group.id == group.id
7
+ @flag = true
8
+ break
9
+ else
10
+ @flag = false
11
+ end
12
+ end %>
13
+ <% end %>
14
+ <% if @flag %>
15
+ <div>
16
+ <label>
17
+ <%= check_box_tag 'group_ids[]', group.id , :checked => "checked" %>
18
+ <%= h group.name %>
19
+ </label>
20
+ </div>
21
+ <% else %>
22
+ <div>
23
+ <label>
24
+ <%= check_box_tag 'group_ids[]', group.id %>
25
+ <%= h group.name %>
26
+ </label>
27
+ </div>
28
+ <% end %>
29
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <div>
2
+ <h3>Update role</h3>
3
+ </div>
4
+ <div>
5
+ <%= render 'form' %>
6
+ </div>
@@ -0,0 +1,31 @@
1
+ <div>
2
+ <h3>Roles</h3>
3
+ </div>
4
+ <div>
5
+ <table>
6
+ <thead>
7
+ <tr>
8
+ <th>Role name</th>
9
+ <th>Role description</th>
10
+ <th>Is active</th>
11
+ <th colspan="3">Action</th>
12
+ </tr>
13
+ </thead>
14
+
15
+ <tbody>
16
+ <% @roles.each do |role| %>
17
+ <tr>
18
+ <td><%= role.role_name %></td>
19
+ <td><%= role.role_description %></td>
20
+ <td><%= role.is_active %></td>
21
+ <td>
22
+ <%= link_to 'Show', role %>
23
+ <%= link_to 'Edit', edit_rbac_role_path(role) %>
24
+ <%= link_to 'Delete', role, method: :delete, data: { confirm: 'Are you sure?' } %>
25
+ </td>
26
+ </tr>
27
+ <% end %>
28
+ </tbody>
29
+ </table>
30
+ <%= link_to 'New role', new_rbac_role_path %>
31
+ </div>