permission_management 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +34 -0
- data/Rakefile +1 -0
- data/app/assets/javascripts/permission_management/init.js +25 -0
- data/app/controllers/permission_management/base_controller.rb +15 -0
- data/app/controllers/permission_management/permissions_controller.rb +23 -0
- data/app/controllers/permission_management/roles_controller.rb +39 -0
- data/app/controllers/permission_management/user_roles_controller.rb +23 -0
- data/app/views/permission_management/roles/_form.haml +17 -0
- data/app/views/permission_management/roles/edit.html.haml +1 -0
- data/app/views/permission_management/roles/index.html.haml +21 -0
- data/app/views/permission_management/roles/new.html.haml +1 -0
- data/app/views/permission_management/user_roles/index.html.haml +14 -0
- data/app/views/permission_management/user_roles/update.js.erb +1 -0
- data/config/routes.rb +7 -0
- data/lib/generators/permission_management/install_generator.rb +57 -0
- data/lib/generators/permission_management/templates/ability.rb +8 -0
- data/lib/generators/permission_management/templates/active_record/permission.rb +7 -0
- data/lib/generators/permission_management/templates/active_record/role.rb +11 -0
- data/lib/generators/permission_management/templates/active_record/role_migration.rb +22 -0
- data/lib/generators/permission_management/templates/permission_management.rb +5 -0
- data/lib/permission_management.rb +67 -0
- data/lib/permission_management/engine.rb +4 -0
- data/lib/permission_management/version.rb +3 -0
- data/permission_management.gemspec +25 -0
- metadata +113 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6e912d6ff0b7c727c357020187264a8b37050247
|
4
|
+
data.tar.gz: 2031ab7c609389d9b2f2a1adf6f0b2237b2cc5ec
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8d2acec43907cf1cc0953f1544b0da04e5189909c4b694c265ef574fcb240c7102ddb581701c6c3b6372bccd38e590d29da418aba1e4a373646b64fbd1a78cdb
|
7
|
+
data.tar.gz: 933dd30bd345f9e79601a1e9c96281d61fd61edfb6da1e9226caa2aa2e560c551bd4f42cc8e2455106afe7299275a1e34a62fdfd681a232138df5fef745615cd
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Ben Zhang
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# PermissionManagement
|
2
|
+
|
3
|
+
Permission Management is a Rails engine in order to simpliy permission mangement process. It is built on top of cancan gem.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'permission_management'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Then run
|
16
|
+
|
17
|
+
$ bundle exec rails g permission_management:install
|
18
|
+
|
19
|
+
To install the relative files.
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
Add the permission management link to your application. You can use this url helper.
|
24
|
+
|
25
|
+
permission_management_engine.permission_management_user_roles_path
|
26
|
+
|
27
|
+
|
28
|
+
## Contributing
|
29
|
+
|
30
|
+
1. Fork it ( http://github.com/<my-github-username>/permission_management/fork )
|
31
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
32
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
33
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
34
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
$(function(){
|
2
|
+
PermissionManagement.switchPermissionFields();
|
3
|
+
$('#pm_role_role_type').change(PermissionManagement.switchPermissionFields);
|
4
|
+
$('.user-role-select-tag').change(function(){
|
5
|
+
$.ajax({
|
6
|
+
url: '/permission_management/user_roles/'+$(this).data('id'),
|
7
|
+
type: 'PUT',
|
8
|
+
data: {
|
9
|
+
role_id: $(this).val(),
|
10
|
+
authenticity_token: $('meta[name=csrf-token]').attr('content')
|
11
|
+
},
|
12
|
+
dataType: 'script'
|
13
|
+
});
|
14
|
+
});
|
15
|
+
});
|
16
|
+
|
17
|
+
var PermissionManagement = {
|
18
|
+
switchPermissionFields: function(){
|
19
|
+
if($('#pm_role_role_type').val() == 'custom') {
|
20
|
+
$('#permission-fields').show();
|
21
|
+
} else {
|
22
|
+
$('#permission-fields').hide();
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class PermissionManagement::BaseController < ApplicationController
|
2
|
+
send(:before_filter, "authenticate_#{PermissionManagement.user_method}!")
|
3
|
+
before_filter :check_permission
|
4
|
+
|
5
|
+
def pm_current_user
|
6
|
+
instance_eval &PermissionManagement.current_user_method
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def check_permission
|
12
|
+
raise CanCan::AccessDenied unless pm_current_user.pm_role_role_type == 'super_admin'
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class PermissionManagement::RolesController < PermissionManagement::BaseController
|
2
|
+
|
3
|
+
def index
|
4
|
+
@roles = PM::Role.all
|
5
|
+
end
|
6
|
+
|
7
|
+
def new
|
8
|
+
@role = PM::Role.new
|
9
|
+
PermissionManagement.permission_models.each{|model| @role.permissions.build :model_name => model.to_s, :action => :no_access }
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
@role = PM::Role.new params[:pm_role]
|
14
|
+
if @role.save
|
15
|
+
redirect_to permission_management_engine.permission_management_pm_roles_path
|
16
|
+
else
|
17
|
+
render action: :new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def edit
|
22
|
+
@role = PM::Role.find params[:id]
|
23
|
+
end
|
24
|
+
|
25
|
+
def update
|
26
|
+
@role = PM::Role.find params[:id]
|
27
|
+
@role.attributes = params[:pm_role]
|
28
|
+
if @role.save
|
29
|
+
redirect_to permission_management_engine.permission_management_pm_roles_path
|
30
|
+
else
|
31
|
+
render action: :edit
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class PermissionManagement::UserRolesController < PermissionManagement::BaseController
|
2
|
+
|
3
|
+
def index
|
4
|
+
@targets = user_model.page(params[:page]).per(10)
|
5
|
+
end
|
6
|
+
|
7
|
+
def update
|
8
|
+
if pm_current_user.super_admin?
|
9
|
+
@target = user_model.find params[:id]
|
10
|
+
@target.pm_role_id = params[:role_id]
|
11
|
+
@target.save
|
12
|
+
else
|
13
|
+
render :js => 'alert("Sorry you do not have the permission!")'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def user_model
|
20
|
+
PermissionManagement.user_model.constantize
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
= simple_nested_form_for [permission_management_engine, :permission_management, @role], :html => { :autocomplete => 'off' }, :defaults => { :input_html => { class: "form-control" }} do |f|
|
2
|
+
- if @role.errors.any?
|
3
|
+
#error_explanation
|
4
|
+
%h2= "#{pluralize(@role.errors.count, "error")} prohibited this role from being saved:"
|
5
|
+
%ul
|
6
|
+
- @role.errors.full_messages.each do |msg|
|
7
|
+
%li= msg
|
8
|
+
= f.input :name
|
9
|
+
= f.input :role_type, collection: PermissionManagement.role_types, prompt: false
|
10
|
+
#permission-fields
|
11
|
+
= f.simple_fields_for :permissions do |p|
|
12
|
+
.row
|
13
|
+
.col-sm-4= p.input :model_name, label: false
|
14
|
+
.col-sm-4= p.input :action, collection: PermissionManagement.action_types, label: false, prompt: false
|
15
|
+
.form-actions
|
16
|
+
= link_to 'Cancel', permission_management_engine.permission_management_pm_roles_path, class: 'btn btn-link pull-left'
|
17
|
+
= f.submit 'Submit', class: 'btn btn-primary', data: { disable_with: 'Please wait ...' }
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'form'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
%table.table
|
2
|
+
%tr
|
3
|
+
%th Role
|
4
|
+
%th Role Type
|
5
|
+
%th
|
6
|
+
- @roles.each do |role|
|
7
|
+
%tr
|
8
|
+
%td= link_to role.name, permission_management_engine.edit_permission_management_pm_role_path(role), class: 'media'
|
9
|
+
%td= role.role_type
|
10
|
+
%td.actions
|
11
|
+
.btn-group
|
12
|
+
- if role.role_type != 'super_admin'
|
13
|
+
= link_to 'Edit', permission_management_engine.edit_permission_management_pm_role_path(role), class: 'btn btn-default'
|
14
|
+
%button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", type: "button"}
|
15
|
+
= fa_icon 'caret-down'
|
16
|
+
%span.sr-only Toggle Dropdown
|
17
|
+
%ul.dropdown-menu.pull-right
|
18
|
+
%li= link_to 'Delete', permission_management_engine.permission_management_pm_role_path(role), :method => :delete, :data => { :confirm => 'Are you sure?' }
|
19
|
+
|
20
|
+
= link_to 'New role', permission_management_engine.new_permission_management_pm_role_path, class: 'btn btn-default'
|
21
|
+
= link_to 'Back', permission_management_engine.permission_management_user_roles_path, class: 'btn btn-default'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'form'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
%table.table
|
2
|
+
%tr
|
3
|
+
%th ID
|
4
|
+
%th User
|
5
|
+
%th Email
|
6
|
+
%th Permission
|
7
|
+
%th= link_to 'Roles', permission_management_engine.permission_management_pm_roles_path
|
8
|
+
- @targets.each do |target|
|
9
|
+
%tr
|
10
|
+
%td= target.id
|
11
|
+
%td= target
|
12
|
+
%td= target.email
|
13
|
+
%td{:id => "user-role-td-#{target.id}"}= target.pm_role_name
|
14
|
+
%td.actions= select_tag "pm_user_#{target.id}", options_from_collection_for_select(PM::Role.all, 'id', 'name', target.pm_role_id), :class => 'user-role-select-tag', :data => {:id => target.id}
|
@@ -0,0 +1 @@
|
|
1
|
+
$('#user-role-td-<%= @target.id %>').html('<%= @target.pm_role_name %>');
|
data/config/routes.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
module PermissionManagement
|
5
|
+
module Generators
|
6
|
+
class InstallGenerator < Rails::Generators::Base
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
source_root File.expand_path("../templates", __FILE__)
|
9
|
+
|
10
|
+
def copy_permission_management_migration
|
11
|
+
migration_template 'active_record/role_migration.rb', 'db/migrate/pm_create_roles'
|
12
|
+
copy_file 'active_record/permission.rb', 'app/models/pm/permission.rb'
|
13
|
+
copy_file 'active_record/role.rb', 'app/models/pm/role.rb'
|
14
|
+
if File.exists? File.join(destination_root, 'app', 'models', 'ability.rb')
|
15
|
+
insert_into_file 'app/models/ability.rb', ability_content, :after => 'user ||= User.new', :force => false
|
16
|
+
else
|
17
|
+
copy_file 'ability.rb', 'app/models/ability.rb'
|
18
|
+
end
|
19
|
+
inject_into_file 'config/routes.rb', "\n mount PermissionManagement::Engine => '/'", { :after => /\.routes\.draw do\s*$/, :force => false }
|
20
|
+
if PermissionManagement.user_model != 'User'
|
21
|
+
insert_into_file 'app/controllers/application_controller.rb', "\n load_and_authorize_resource\n", :after => 'protect_from_forgery', :force => false
|
22
|
+
current_ability =
|
23
|
+
<<RUBY
|
24
|
+
def current_ability
|
25
|
+
@current_ability ||= Ability.new(current_#{PermissionManagement.user_model.underscore})
|
26
|
+
end
|
27
|
+
RUBY
|
28
|
+
insert_into_file 'app/controllers/application_controller.rb', current_ability, :after => 'load_and_authorize_resource', :force => false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.next_migration_number(dirname)
|
33
|
+
Time.now.strftime("%Y%m%d%H%M%S")
|
34
|
+
end
|
35
|
+
|
36
|
+
def ability_content
|
37
|
+
<<RUBY
|
38
|
+
|
39
|
+
case user.pm_role_role_type
|
40
|
+
when 'super_admin'
|
41
|
+
can :manage, :all
|
42
|
+
when 'read_only'
|
43
|
+
can :read, :all
|
44
|
+
when 'no_access'
|
45
|
+
|
46
|
+
when 'custom'
|
47
|
+
user.pm_role.permissions.each do |permission|
|
48
|
+
unless permission.action == 'no_access'
|
49
|
+
can permission.action.to_sym, permission.model_name.constantize
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
RUBY
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class PM::Role < ActiveRecord::Base
|
2
|
+
self.table_name = "pm_roles"
|
3
|
+
|
4
|
+
attr_accessible :name, :role_type, :permissions_attributes
|
5
|
+
|
6
|
+
has_many :permissions, foreign_key: :pm_role_id, class_name: 'PM::Permission'
|
7
|
+
accepts_nested_attributes_for :permissions, allow_destroy: true
|
8
|
+
|
9
|
+
validates :role_type, presence: true, inclusion: { in: %w(super_admin read_only no_access custom)}
|
10
|
+
validates :name, presence: true
|
11
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class PmCreateRoles < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :pm_roles do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :role_type, limit: 50
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
PM::Role.create! name: 'Full Access', role_type: 'super_admin'
|
9
|
+
PM::Role.create! name: 'Read Only', role_type: 'read_only'
|
10
|
+
PM::Role.create! name: 'No Access', role_type: 'no_access'
|
11
|
+
add_column :<%= PermissionManagement.user_method.pluralize %>, :pm_role_id, :integer
|
12
|
+
add_index :<%= PermissionManagement.user_method.pluralize %>, :pm_role_id
|
13
|
+
|
14
|
+
create_table :pm_permissions do |t|
|
15
|
+
t.integer :pm_role_id
|
16
|
+
t.string :action
|
17
|
+
t.string :model_name
|
18
|
+
t.timestamps
|
19
|
+
end
|
20
|
+
add_index :pm_permissions, :pm_role_id
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require "permission_management/version"
|
2
|
+
require 'permission_management/engine'
|
3
|
+
|
4
|
+
module PermissionManagement
|
5
|
+
|
6
|
+
DEFAULT_AUTHORIZE_USER_MODEL = 'User'
|
7
|
+
DEFAULT_USER_METHOD = Proc.new do
|
8
|
+
respond_to?("current_#{PermissionManagement.user_method}".to_sym) && send("current_#{PermissionManagement.user_method}".to_sym)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.setup
|
12
|
+
yield self
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.user_model(arg = nil)
|
16
|
+
@user_model = arg if arg.present?
|
17
|
+
@user_model || DEFAULT_AUTHORIZE_USER_MODEL
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.user_method
|
21
|
+
user_model.underscore
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.permission_models
|
25
|
+
if only_models == :all
|
26
|
+
ActiveRecord::Base.descendants.select{|ar| !except_models.include?(ar.to_s) }
|
27
|
+
else
|
28
|
+
ActiveRecord::Base.descendants.select{|ar| (only_models - except_models).include?(ar.to_s) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.only_models(arg = :all)
|
33
|
+
@only_models ||= arg
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.except_models(arg = [])
|
37
|
+
return @except_models if @except_models
|
38
|
+
@except_models = arg + ['PM::Role', 'PM::Permission']
|
39
|
+
@except_models
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.role_types
|
43
|
+
[['Full Access', :super_admin], ['Read Only', :read_only], ['No Access', :no_access], ['Custom', :custom]]
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.action_types
|
47
|
+
[['No Access', :no_access], ['Admin (View, Create, Edit, Delete)', :manage], ['Observer (View Only)', :read]]
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.current_user_method
|
51
|
+
DEFAULT_USER_METHOD
|
52
|
+
end
|
53
|
+
|
54
|
+
module Base
|
55
|
+
extend ActiveSupport::Concern
|
56
|
+
|
57
|
+
included do
|
58
|
+
belongs_to :pm_role, class_name: 'PM::Role'
|
59
|
+
delegate :name, to: :pm_role, prefix: true, allow_nil: true
|
60
|
+
delegate :role_type, to: :pm_role, prefix: true, allow_nil: true
|
61
|
+
end
|
62
|
+
|
63
|
+
def super_admin?
|
64
|
+
pm_role_role_type == 'super_admin'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'permission_management/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "permission_management"
|
8
|
+
spec.version = PermissionManagement::VERSION
|
9
|
+
spec.authors = ["Ben Zhang"]
|
10
|
+
spec.email = ["bzbnhang@gmail.com"]
|
11
|
+
spec.summary = %q{Permission management.}
|
12
|
+
spec.description = %q{Inspired by Rackspace permission management system.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
|
24
|
+
spec.add_dependency 'nested_form'
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: permission_management
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben Zhang
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-07-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: nested_form
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Inspired by Rackspace permission management system.
|
56
|
+
email:
|
57
|
+
- bzbnhang@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE.txt
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- app/assets/javascripts/permission_management/init.js
|
68
|
+
- app/controllers/permission_management/base_controller.rb
|
69
|
+
- app/controllers/permission_management/permissions_controller.rb
|
70
|
+
- app/controllers/permission_management/roles_controller.rb
|
71
|
+
- app/controllers/permission_management/user_roles_controller.rb
|
72
|
+
- app/views/permission_management/roles/_form.haml
|
73
|
+
- app/views/permission_management/roles/edit.html.haml
|
74
|
+
- app/views/permission_management/roles/index.html.haml
|
75
|
+
- app/views/permission_management/roles/new.html.haml
|
76
|
+
- app/views/permission_management/user_roles/index.html.haml
|
77
|
+
- app/views/permission_management/user_roles/update.js.erb
|
78
|
+
- config/routes.rb
|
79
|
+
- lib/generators/permission_management/install_generator.rb
|
80
|
+
- lib/generators/permission_management/templates/ability.rb
|
81
|
+
- lib/generators/permission_management/templates/active_record/permission.rb
|
82
|
+
- lib/generators/permission_management/templates/active_record/role.rb
|
83
|
+
- lib/generators/permission_management/templates/active_record/role_migration.rb
|
84
|
+
- lib/generators/permission_management/templates/permission_management.rb
|
85
|
+
- lib/permission_management.rb
|
86
|
+
- lib/permission_management/engine.rb
|
87
|
+
- lib/permission_management/version.rb
|
88
|
+
- permission_management.gemspec
|
89
|
+
homepage: ''
|
90
|
+
licenses:
|
91
|
+
- MIT
|
92
|
+
metadata: {}
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
requirements: []
|
108
|
+
rubyforge_project:
|
109
|
+
rubygems_version: 2.2.2
|
110
|
+
signing_key:
|
111
|
+
specification_version: 4
|
112
|
+
summary: Permission management.
|
113
|
+
test_files: []
|