rbac 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +85 -0
- data/Rakefile +2 -0
- data/app/helpers/rbac/application_helper.rb +20 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/routes.rb +7 -0
- data/images/user_form.png +0 -0
- data/lib/generators/rbac/create/create_generator.rb +33 -0
- data/lib/generators/rbac/create/templates/controllers/rbac/groups_controller.rb +81 -0
- data/lib/generators/rbac/create/templates/controllers/rbac/privileges_controller.rb +76 -0
- data/lib/generators/rbac/create/templates/controllers/rbac/roles_controller.rb +81 -0
- data/lib/generators/rbac/create/templates/models/rbac/group.rb +11 -0
- data/lib/generators/rbac/create/templates/models/rbac/group_privilege.rb +6 -0
- data/lib/generators/rbac/create/templates/models/rbac/group_role.rb +6 -0
- data/lib/generators/rbac/create/templates/models/rbac/privilege.rb +7 -0
- data/lib/generators/rbac/create/templates/models/rbac/role.rb +11 -0
- data/lib/generators/rbac/create/templates/models/rbac/role_user.rb +6 -0
- data/lib/generators/rbac/create/templates/views/rbac/groups/_form.html.erb +35 -0
- data/lib/generators/rbac/create/templates/views/rbac/groups/_privilege_fields.html.erb +27 -0
- data/lib/generators/rbac/create/templates/views/rbac/groups/edit.html.erb +6 -0
- data/lib/generators/rbac/create/templates/views/rbac/groups/index.html.erb +31 -0
- data/lib/generators/rbac/create/templates/views/rbac/groups/index.json.jbuilder +4 -0
- data/lib/generators/rbac/create/templates/views/rbac/groups/new.html.erb +6 -0
- data/lib/generators/rbac/create/templates/views/rbac/groups/show.html.erb +19 -0
- data/lib/generators/rbac/create/templates/views/rbac/groups/show.json.jbuilder +1 -0
- data/lib/generators/rbac/create/templates/views/rbac/privileges/_form.html.erb +39 -0
- data/lib/generators/rbac/create/templates/views/rbac/privileges/edit.html.erb +6 -0
- data/lib/generators/rbac/create/templates/views/rbac/privileges/index.html.erb +35 -0
- data/lib/generators/rbac/create/templates/views/rbac/privileges/index.json.jbuilder +4 -0
- data/lib/generators/rbac/create/templates/views/rbac/privileges/new.html.erb +6 -0
- data/lib/generators/rbac/create/templates/views/rbac/privileges/show.html.erb +29 -0
- data/lib/generators/rbac/create/templates/views/rbac/privileges/show.json.jbuilder +1 -0
- data/lib/generators/rbac/create/templates/views/rbac/roles/_form.html.erb +35 -0
- data/lib/generators/rbac/create/templates/views/rbac/roles/_group_fields.html.erb +29 -0
- data/lib/generators/rbac/create/templates/views/rbac/roles/edit.html.erb +6 -0
- data/lib/generators/rbac/create/templates/views/rbac/roles/index.html.erb +31 -0
- data/lib/generators/rbac/create/templates/views/rbac/roles/index.json.jbuilder +4 -0
- data/lib/generators/rbac/create/templates/views/rbac/roles/new.html.erb +6 -0
- data/lib/generators/rbac/create/templates/views/rbac/roles/show.html.erb +19 -0
- data/lib/generators/rbac/create/templates/views/rbac/roles/show.json.jbuilder +1 -0
- data/lib/generators/rbac/migration/migration_generator.rb +32 -0
- data/lib/generators/rbac/migration/templates/create_group_privileges.rb +8 -0
- data/lib/generators/rbac/migration/templates/create_group_roles.rb +8 -0
- data/lib/generators/rbac/migration/templates/create_groups.rb +11 -0
- data/lib/generators/rbac/migration/templates/create_privileges.rb +13 -0
- data/lib/generators/rbac/migration/templates/create_role_users.rb +8 -0
- data/lib/generators/rbac/migration/templates/create_roles.rb +11 -0
- data/lib/generators/rbac/migration/templates/create_users.rb +12 -0
- data/lib/rbac.rb +7 -0
- data/lib/rbac/engine.rb +4 -0
- data/lib/rbac/version.rb +3 -0
- data/rbac.gemspec +24 -0
- 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,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,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,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,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,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,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,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>
|