permission_management 0.0.2

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 (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: []