permission_management 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +9 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +34 -0
  6. data/Rakefile +1 -0
  7. data/app/assets/javascripts/permission_management/init.js +25 -0
  8. data/app/controllers/permission_management/base_controller.rb +15 -0
  9. data/app/controllers/permission_management/permissions_controller.rb +23 -0
  10. data/app/controllers/permission_management/roles_controller.rb +39 -0
  11. data/app/controllers/permission_management/user_roles_controller.rb +23 -0
  12. data/app/views/permission_management/roles/_form.haml +17 -0
  13. data/app/views/permission_management/roles/edit.html.haml +1 -0
  14. data/app/views/permission_management/roles/index.html.haml +21 -0
  15. data/app/views/permission_management/roles/new.html.haml +1 -0
  16. data/app/views/permission_management/user_roles/index.html.haml +14 -0
  17. data/app/views/permission_management/user_roles/update.js.erb +1 -0
  18. data/config/routes.rb +7 -0
  19. data/lib/generators/permission_management/install_generator.rb +57 -0
  20. data/lib/generators/permission_management/templates/ability.rb +8 -0
  21. data/lib/generators/permission_management/templates/active_record/permission.rb +7 -0
  22. data/lib/generators/permission_management/templates/active_record/role.rb +11 -0
  23. data/lib/generators/permission_management/templates/active_record/role_migration.rb +22 -0
  24. data/lib/generators/permission_management/templates/permission_management.rb +5 -0
  25. data/lib/permission_management.rb +67 -0
  26. data/lib/permission_management/engine.rb +4 -0
  27. data/lib/permission_management/version.rb +3 -0
  28. data/permission_management.gemspec +25 -0
  29. 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
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in permission_management.gemspec
4
+
5
+ gemspec
6
+
7
+ platforms :ruby do
8
+ gem "nested_form", git: 'git://github.com/BenZhang/nested_form.git'
9
+ end
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,23 @@
1
+ class PermissionManagement::PermissionsController < PermissionManagement::BaseController
2
+
3
+ def new
4
+
5
+ end
6
+
7
+ def create
8
+
9
+ end
10
+
11
+ def edit
12
+
13
+ end
14
+
15
+ def update
16
+
17
+ end
18
+
19
+ def destroy
20
+
21
+ end
22
+
23
+ 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,7 @@
1
+ PermissionManagement::Engine.routes.draw do
2
+ namespace :permission_management do
3
+ resources :user_roles
4
+ resources :pm_roles, controller: 'roles'
5
+ resources :permissions
6
+ end
7
+ end
@@ -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,8 @@
1
+ class Ability
2
+ include CanCan::Ability
3
+
4
+ def initialize(user)
5
+ user ||= User.new
6
+ <%= ability_content -%>
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ class PM::Permission < ActiveRecord::Base
2
+ self.table_name = "pm_permissions"
3
+
4
+ attr_accessible :action, :model_name
5
+
6
+ belongs_to :role
7
+ 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,5 @@
1
+ PermissionManagement.setup do |config|
2
+ # config.user_model 'User'
3
+ # config.only_models :all
4
+ # config.except_models []
5
+ 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,4 @@
1
+ module PermissionManagement
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module PermissionManagement
2
+ VERSION = "0.0.2"
3
+ 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: []