request_refinery 0.0.1

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 (66) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/request_refinery/application.js +13 -0
  6. data/app/assets/javascripts/request_refinery/controller_filters.js +2 -0
  7. data/app/assets/javascripts/request_refinery/customers.js +2 -0
  8. data/app/assets/javascripts/request_refinery/permissions.js +2 -0
  9. data/app/assets/javascripts/request_refinery/roles.js +2 -0
  10. data/app/assets/stylesheets/request_refinery/application.css +15 -0
  11. data/app/assets/stylesheets/request_refinery/controller_filters.css +4 -0
  12. data/app/assets/stylesheets/request_refinery/customers.css +4 -0
  13. data/app/assets/stylesheets/request_refinery/permissions.css +4 -0
  14. data/app/assets/stylesheets/request_refinery/roles.css +4 -0
  15. data/app/assets/stylesheets/scaffold.css +56 -0
  16. data/app/controllers/request_refinery/application_controller.rb +11 -0
  17. data/app/controllers/request_refinery/controller_filters_controller.rb +62 -0
  18. data/app/controllers/request_refinery/customers_controller.rb +62 -0
  19. data/app/controllers/request_refinery/permissions_controller.rb +62 -0
  20. data/app/controllers/request_refinery/roles_controller.rb +62 -0
  21. data/app/helpers/request_refinery/application_helper.rb +4 -0
  22. data/app/helpers/request_refinery/controller_filters_helper.rb +4 -0
  23. data/app/helpers/request_refinery/customers_helper.rb +4 -0
  24. data/app/helpers/request_refinery/permissions_helper.rb +4 -0
  25. data/app/helpers/request_refinery/roles_helper.rb +4 -0
  26. data/app/models/request_refinery/controller_filter.rb +5 -0
  27. data/app/models/request_refinery/customer.rb +5 -0
  28. data/app/models/request_refinery/permission.rb +11 -0
  29. data/app/models/request_refinery/role.rb +9 -0
  30. data/app/models/request_refinery/user.rb +51 -0
  31. data/app/views/layouts/request_refinery/application.html.erb +15 -0
  32. data/app/views/request_refinery/controller_filters/_form.html.erb +29 -0
  33. data/app/views/request_refinery/controller_filters/edit.html.erb +6 -0
  34. data/app/views/request_refinery/controller_filters/index.html.erb +29 -0
  35. data/app/views/request_refinery/controller_filters/new.html.erb +5 -0
  36. data/app/views/request_refinery/controller_filters/show.html.erb +19 -0
  37. data/app/views/request_refinery/customers/_form.html.erb +33 -0
  38. data/app/views/request_refinery/customers/edit.html.erb +6 -0
  39. data/app/views/request_refinery/customers/index.html.erb +31 -0
  40. data/app/views/request_refinery/customers/new.html.erb +5 -0
  41. data/app/views/request_refinery/customers/show.html.erb +24 -0
  42. data/app/views/request_refinery/permissions/_form.html.erb +21 -0
  43. data/app/views/request_refinery/permissions/edit.html.erb +6 -0
  44. data/app/views/request_refinery/permissions/index.html.erb +28 -0
  45. data/app/views/request_refinery/permissions/new.html.erb +5 -0
  46. data/app/views/request_refinery/permissions/show.html.erb +9 -0
  47. data/app/views/request_refinery/roles/_form.html.erb +29 -0
  48. data/app/views/request_refinery/roles/edit.html.erb +6 -0
  49. data/app/views/request_refinery/roles/index.html.erb +29 -0
  50. data/app/views/request_refinery/roles/new.html.erb +5 -0
  51. data/app/views/request_refinery/roles/show.html.erb +19 -0
  52. data/config/initializers/application_controller.rb +9 -0
  53. data/config/initializers/devise.rb +261 -0
  54. data/config/locales/devise.en.yml +60 -0
  55. data/config/routes.rb +13 -0
  56. data/db/migrate/20141003181010_devise_create_request_refinery_users.rb +76 -0
  57. data/db/migrate/20141003190734_create_request_refinery_controller_filters.rb +18 -0
  58. data/db/migrate/20141003190741_create_request_refinery_permissions.rb +31 -0
  59. data/db/migrate/20141003194717_create_request_refinery_customers.rb +12 -0
  60. data/db/seeds.rb +0 -0
  61. data/lib/generators/request_refinery/install_generator.rb +79 -0
  62. data/lib/request_refinery/engine.rb +15 -0
  63. data/lib/request_refinery/version.rb +3 -0
  64. data/lib/request_refinery.rb +70 -0
  65. data/lib/tasks/request_refinery_tasks.rake +4 -0
  66. metadata +172 -0
@@ -0,0 +1,76 @@
1
+ class DeviseCreateRequestRefineryUsers < ActiveRecord::Migration
2
+ def change
3
+ create_table(:request_refinery_users) do |t|
4
+ ## Database authenticatable
5
+ t.string :email, null: false, default: ""
6
+ t.string :encrypted_password, null: false, default: ""
7
+
8
+ ## Recoverable
9
+ t.string :reset_password_token
10
+ t.datetime :reset_password_sent_at
11
+
12
+ ## Rememberable
13
+ t.datetime :remember_created_at
14
+
15
+ ## Trackable
16
+ t.integer :sign_in_count, default: 0, null: false
17
+ t.datetime :current_sign_in_at
18
+ t.datetime :last_sign_in_at
19
+ t.string :current_sign_in_ip
20
+ t.string :last_sign_in_ip
21
+
22
+ ## Confirmable
23
+ # t.string :confirmation_token
24
+ # t.datetime :confirmed_at
25
+ # t.datetime :confirmation_sent_at
26
+ # t.string :unconfirmed_email # Only if using reconfirmable
27
+
28
+ ## Lockable
29
+ # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
30
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
31
+ # t.datetime :locked_at
32
+
33
+ t.string :first_name
34
+ t.string :last_name
35
+ t.string :username, null: false, default: ""
36
+
37
+ t.timestamps
38
+ end
39
+
40
+ add_index :request_refinery_users, :email, unique: true
41
+ add_index :request_refinery_users, :username, unique: true
42
+ add_index :request_refinery_users, :reset_password_token, unique: true
43
+ # add_index :request_refinery_users, :confirmation_token, unique: true
44
+ # add_index :request_refinery_users, :unlock_token, unique: true
45
+
46
+ create_table :request_refinery_permissions_users, id:false do |t|
47
+ t.belongs_to :permission
48
+ t.belongs_to :user
49
+
50
+ t.timestamps
51
+ end
52
+
53
+ create_table :request_refinery_roles_users, id:false do |t|
54
+ t.belongs_to :role
55
+ t.belongs_to :user
56
+
57
+ t.timestamps
58
+ end
59
+
60
+ create_table :request_refinery_customers_users, id:false do |t|
61
+ t.belongs_to :customer
62
+ t.belongs_to :user
63
+
64
+ t.timestamps
65
+ end
66
+
67
+ create_table :request_refinery_inverse_users_restrictions, id:false do |t|
68
+ t.belongs_to :permission
69
+ t.belongs_to :user
70
+
71
+ t.timestamps
72
+ end
73
+
74
+
75
+ end
76
+ end
@@ -0,0 +1,18 @@
1
+ class CreateRequestRefineryControllerFilters < ActiveRecord::Migration
2
+ def change
3
+ create_table :request_refinery_controller_filters do |t|
4
+ t.string :http_method
5
+ t.string :controller
6
+ t.string :action_name
7
+
8
+ t.timestamps
9
+ end
10
+
11
+ create_table :request_refinery_controller_filters_permissions do |t|
12
+ t.belongs_to :controller_filter
13
+ t.belongs_to :permission
14
+
15
+ t.timestamps
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ class CreateRequestRefineryPermissions < ActiveRecord::Migration
2
+ def change
3
+ create_table :request_refinery_roles do |t|
4
+ t.string :group
5
+
6
+ t.timestamps
7
+ end
8
+ add_index :request_refinery_roles, :group, unique: true
9
+
10
+ create_table :request_refinery_permissions do |t|
11
+ t.string :name
12
+
13
+ t.timestamps
14
+ end
15
+ add_index :request_refinery_permissions, :name, unique: true
16
+
17
+ create_table :request_refinery_permissions_roles, id:false do |t|
18
+ t.belongs_to :role
19
+ t.belongs_to :permission
20
+
21
+ t.timestamps
22
+ end
23
+
24
+ create_table :request_refinery_restrictions_inverse_roles, id:false do |t|
25
+ t.belongs_to :role
26
+ t.belongs_to :permission
27
+
28
+ t.timestamps
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ class CreateRequestRefineryCustomers < ActiveRecord::Migration
2
+ def change
3
+ create_table :request_refinery_customers do |t|
4
+ t.string :cust_id
5
+ t.string :prefix
6
+ t.string :folder_name
7
+ t.string :error_email_recipients
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
data/db/seeds.rb ADDED
File without changes
@@ -0,0 +1,79 @@
1
+ require 'rails/generators/base'
2
+
3
+ module RequestRefinery
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ # include Rails::Generators::Actions::CreateMigration
7
+ # Mount the engine in routes.rb of the host app
8
+ # route "mount RequestRefinery::Engine, at:'/'"
9
+
10
+ ############################################################
11
+ # Seed data ################################################
12
+ ############################################################
13
+
14
+ # Create an initial set of Permissions
15
+ puts "Creating default permission set\n\tview\n\tedit\n\tcreate\n\tdelete\n\tall"
16
+ perms = []
17
+ perms << view = Permission.new(name:"view")
18
+ perms << edit = Permission.new(name:"edit")
19
+ perms << create = Permission.new(name:"create")
20
+ perms << delete = Permission.new(name:"delete")
21
+ perms << all = Permission.new(name:"all")
22
+ perms.each{|x| x.save}
23
+
24
+ # Create an initial admin role
25
+ puts "Creating admin role with permission 'all'"
26
+ admin = Role.new(group: "admin")
27
+ admin.permissions = [all]
28
+ admin.save
29
+
30
+ # Create an initial admin user
31
+ puts "Creating user 'temporary admin' with 'admin' role"
32
+ email = "admin@admin.fake"
33
+ password = "password"
34
+ puts "\tUsername: #{email}\n\tPassword: #{password}"
35
+ admin_user = User.new(email:email,password:password,first_name:"temporary",last_name:"admin")
36
+ admin_user.roles << admin
37
+ admin_user.save
38
+
39
+ # Create default set of controller filters
40
+ puts "Creating default http_method permissions
41
+ \n\tGET permissions: view
42
+ \n\tPOST permissions: create
43
+ \n\tPUT permissions: edit
44
+ \n\tPATCH permissions: edit
45
+ \n\tDELETE permissions: delete"
46
+ ControllerFilter.new(http_method:"get",permissions:[view]).save
47
+ ControllerFilter.new(http_method:"post",permissions:[create]).save
48
+ ControllerFilter.new(http_method:"put",permissions:[edit]).save
49
+ ControllerFilter.new(http_method:"patch",permissions:[edit]).save
50
+ ControllerFilter.new(http_method:"delete",permissions:[delete]).save
51
+
52
+
53
+
54
+
55
+
56
+
57
+ # source_root File.expand_path("../../templates", __FILE__)
58
+
59
+ # desc "Creates a Devise initializer and copy locale files to your application."
60
+ # # class_option :orm
61
+
62
+ # def copy_initializer
63
+ # template "devise.rb", "config/initializers/devise.rb"
64
+ # end
65
+
66
+ # def copy_locale
67
+ # copy_file "../../../config/locales/en.yml", "config/locales/devise.en.yml"
68
+ # end
69
+
70
+ # def show_readme
71
+ # readme "README" if behavior == :invoke
72
+ # end
73
+
74
+ # def rails_4?
75
+ # Rails::VERSION::MAJOR == 4
76
+ # end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,15 @@
1
+ module RequestRefinery
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace RequestRefinery
4
+
5
+ # to avoid the railties migration step
6
+ initializer :append_migrations do |app|
7
+ unless app.root.to_s.match root.to_s
8
+ config.paths["db/migrate"].expanded.each do |expanded_path|
9
+ app.config.paths["db/migrate"] << expanded_path
10
+ end
11
+ end
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module RequestRefinery
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,70 @@
1
+ require 'devise'
2
+ require "request_refinery/engine"
3
+
4
+ module RequestRefinery
5
+ module ControllerMethods
6
+
7
+ # returns a boolean indicating whether the user has the permission/permissions in omniParam
8
+ # the intended use is to pass it a symbol or an array of symbols, but there are various other options below:
9
+ # omniParam can be a string representing Permission.name, a symbol representing the same, or the actual Permission object
10
+ # omniParam can also be an array containg any combination of the aforementioned single parameters
11
+ def authorized_to? omniParam, user:current_user, permissions:nil
12
+ perms = permissions
13
+ perms = user.permission_syms if perms === nil or (!perms.is_a? Array or !perms[0].is_a? Symbol)
14
+
15
+ return true if perms.include? :all
16
+
17
+ if omniParam.is_a? Symbol
18
+ return perms.include? omniParam
19
+ elsif omniParam.is_a? String
20
+ return perms.include? omniParam.to_sym
21
+ elsif omniParam.is_a? RequestRefinery::Permission
22
+ return perms.include? omniParam.name.to_sym
23
+ elsif omniParam.is_a? Array
24
+ return omniParam.all?{|x| authorized_to? x,user:user, permissions:perms}
25
+ elsif omniParam.is_a? RequestRefinery::Permission::ActiveRecord_Associations_CollectionProxy
26
+ return authorized_to? omniParam.to_a, user:user, permissions:perms
27
+ elsif omniParam.is_a? Role # not going to handle Role because that would weaken the connection between access to a resource and a specific permission
28
+ elsif omniParam.is_a? Hash # does not make sense
29
+ elsif omniParam.is_a? User # does not make sense
30
+ else
31
+ return false
32
+ end
33
+ return false
34
+ end
35
+
36
+ def enforce_request_permissions user:current_user
37
+ # Allow all DeviseController methods
38
+ return if self.class.superclass.to_s == DeviseController.to_s
39
+
40
+ # collect the method, controller, and action
41
+ # look for a matching controller filter
42
+ filter = RequestRefinery::ControllerFilter.where(http_method:request.method.downcase,controller:self.class.to_s,action_name:@_action_name).first
43
+
44
+ # look for a http_method specific controller-wide filter (ie - the action_name will be blank) if there is not one for the method, and use that filter for the request instead
45
+ filter = RequestRefinery::ControllerFilter.where(http_method:request.method.downcase,controller:self.class.to_s,action_name:nil).first if filter.blank?
46
+
47
+ # look for a controller-wide filter (ie - the action_name and http_method will be blank) if there is not one for the method, and use that filter for the request instead
48
+ filter = RequestRefinery::ControllerFilter.where(http_method:nil,controller:self.class.to_s,action_name:nil).first if filter.blank?
49
+
50
+ # look for an http_method-wide filter (only the http_method will be filled in) if there is not one for the controller (not recommended since this loosens the security)
51
+ filter = RequestRefinery::ControllerFilter.where(http_method:request.method.downcase,controller:nil,action_name:nil).first if filter.blank?
52
+
53
+ # handle unauthorized request with unauthorized_request method if filter.blank?
54
+ return unauthorized_request if filter.blank?
55
+
56
+ # get the required permissions and user permissions
57
+ # handle unauthorized request with unauthorized_request method unless authorized_to? filter.permissions
58
+ unauthorized_request(filter:filter) unless authorized_to? filter.permissions
59
+
60
+ puts "\n\nConfirmed that #{user.email} is authorized to #{filter.http_method.upcase}::>#{filter.controller}.#{filter.action_name}\n\n" if authorized_to? filter.permissions
61
+ end
62
+
63
+ # can render any page, but a redirect will result in a redirect loop
64
+ def unauthorized_request user:current_user,filter:nil
65
+ puts "\n\nNo filter matches the given http method, controller, or controller method, rerouting..." if filter.blank?
66
+ puts "\n\nUser #{user.email} is not authorized to #{filter.http_method.upcase}::>#{filter.controller || 'all'}.#{filter.action_name || 'all'}, rerouting...\n\n" unless filter.blank?
67
+ render json: "Unauthorized Request"
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :request_refinery do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: request_refinery
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nathan Hanna
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.1.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.1.6
27
+ - !ruby/object:Gem::Dependency
28
+ name: devise
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
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: railties
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
+ - !ruby/object:Gem::Dependency
56
+ name: sqlite3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: |-
70
+ Creates the following tables:
71
+ Users
72
+ Roles
73
+ Permissions
74
+ ControllerFilters
75
+ Implements a devise authentication strategy already configured.
76
+ Makes available an 'authorized_to? method in application controller that returns true if the users permissions match the given permissions/list of permissions.
77
+ Implements whitelisting of all requests. Every http request needs to have an associated ControllerFilter. If the filter exists, then the current_user's permissions must satisfy the permissions required by the filter.
78
+ email:
79
+ - jnathanhdev@gmail.com
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files: []
83
+ files:
84
+ - MIT-LICENSE
85
+ - README.rdoc
86
+ - Rakefile
87
+ - app/assets/javascripts/request_refinery/application.js
88
+ - app/assets/javascripts/request_refinery/controller_filters.js
89
+ - app/assets/javascripts/request_refinery/customers.js
90
+ - app/assets/javascripts/request_refinery/permissions.js
91
+ - app/assets/javascripts/request_refinery/roles.js
92
+ - app/assets/stylesheets/request_refinery/application.css
93
+ - app/assets/stylesheets/request_refinery/controller_filters.css
94
+ - app/assets/stylesheets/request_refinery/customers.css
95
+ - app/assets/stylesheets/request_refinery/permissions.css
96
+ - app/assets/stylesheets/request_refinery/roles.css
97
+ - app/assets/stylesheets/scaffold.css
98
+ - app/controllers/request_refinery/application_controller.rb
99
+ - app/controllers/request_refinery/controller_filters_controller.rb
100
+ - app/controllers/request_refinery/customers_controller.rb
101
+ - app/controllers/request_refinery/permissions_controller.rb
102
+ - app/controllers/request_refinery/roles_controller.rb
103
+ - app/helpers/request_refinery/application_helper.rb
104
+ - app/helpers/request_refinery/controller_filters_helper.rb
105
+ - app/helpers/request_refinery/customers_helper.rb
106
+ - app/helpers/request_refinery/permissions_helper.rb
107
+ - app/helpers/request_refinery/roles_helper.rb
108
+ - app/models/request_refinery/controller_filter.rb
109
+ - app/models/request_refinery/customer.rb
110
+ - app/models/request_refinery/permission.rb
111
+ - app/models/request_refinery/role.rb
112
+ - app/models/request_refinery/user.rb
113
+ - app/views/layouts/request_refinery/application.html.erb
114
+ - app/views/request_refinery/controller_filters/_form.html.erb
115
+ - app/views/request_refinery/controller_filters/edit.html.erb
116
+ - app/views/request_refinery/controller_filters/index.html.erb
117
+ - app/views/request_refinery/controller_filters/new.html.erb
118
+ - app/views/request_refinery/controller_filters/show.html.erb
119
+ - app/views/request_refinery/customers/_form.html.erb
120
+ - app/views/request_refinery/customers/edit.html.erb
121
+ - app/views/request_refinery/customers/index.html.erb
122
+ - app/views/request_refinery/customers/new.html.erb
123
+ - app/views/request_refinery/customers/show.html.erb
124
+ - app/views/request_refinery/permissions/_form.html.erb
125
+ - app/views/request_refinery/permissions/edit.html.erb
126
+ - app/views/request_refinery/permissions/index.html.erb
127
+ - app/views/request_refinery/permissions/new.html.erb
128
+ - app/views/request_refinery/permissions/show.html.erb
129
+ - app/views/request_refinery/roles/_form.html.erb
130
+ - app/views/request_refinery/roles/edit.html.erb
131
+ - app/views/request_refinery/roles/index.html.erb
132
+ - app/views/request_refinery/roles/new.html.erb
133
+ - app/views/request_refinery/roles/show.html.erb
134
+ - config/initializers/application_controller.rb
135
+ - config/initializers/devise.rb
136
+ - config/locales/devise.en.yml
137
+ - config/routes.rb
138
+ - db/migrate/20141003181010_devise_create_request_refinery_users.rb
139
+ - db/migrate/20141003190734_create_request_refinery_controller_filters.rb
140
+ - db/migrate/20141003190741_create_request_refinery_permissions.rb
141
+ - db/migrate/20141003194717_create_request_refinery_customers.rb
142
+ - db/seeds.rb
143
+ - lib/generators/request_refinery/install_generator.rb
144
+ - lib/request_refinery.rb
145
+ - lib/request_refinery/engine.rb
146
+ - lib/request_refinery/version.rb
147
+ - lib/tasks/request_refinery_tasks.rake
148
+ homepage: https://github.com/jnathanh/request_refinery
149
+ licenses:
150
+ - MIT
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 2.2.2
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: Implements a permissions system for Rails api endpoints and devise users
172
+ test_files: []