effective_roles 1.4.4 → 1.5.0

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +7 -34
  4. data/app/controllers/admin/roles_controller.rb +2 -3
  5. data/app/helpers/effective_roles_helper.rb +21 -39
  6. data/app/views/effective/roles/_summary.html.haml +6 -8
  7. data/config/routes.rb +4 -4
  8. data/lib/effective_roles.rb +16 -6
  9. data/lib/effective_roles/version.rb +1 -1
  10. metadata +3 -192
  11. data/Rakefile +0 -23
  12. data/app/views/effective/roles/_fields.html.haml +0 -17
  13. data/lib/tasks/effective_roles_tasks.rake +0 -4
  14. data/spec/dummy/README.rdoc +0 -10
  15. data/spec/dummy/Rakefile +0 -7
  16. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  17. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  18. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  19. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  20. data/spec/dummy/app/models/post.rb +0 -3
  21. data/spec/dummy/app/models/user.rb +0 -3
  22. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  23. data/spec/dummy/config.ru +0 -4
  24. data/spec/dummy/config/application.rb +0 -58
  25. data/spec/dummy/config/boot.rb +0 -10
  26. data/spec/dummy/config/database.yml +0 -25
  27. data/spec/dummy/config/environment.rb +0 -5
  28. data/spec/dummy/config/environments/development.rb +0 -36
  29. data/spec/dummy/config/environments/production.rb +0 -67
  30. data/spec/dummy/config/environments/test.rb +0 -37
  31. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  32. data/spec/dummy/config/initializers/inflections.rb +0 -15
  33. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  34. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  35. data/spec/dummy/config/initializers/session_store.rb +0 -8
  36. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  37. data/spec/dummy/config/routes.rb +0 -58
  38. data/spec/dummy/db/schema.rb +0 -46
  39. data/spec/dummy/db/test.sqlite3 +0 -0
  40. data/spec/effective_roles_spec.rb +0 -147
  41. data/spec/models/acts_as_role_restricted_spec.rb +0 -218
  42. data/spec/spec_helper.rb +0 -40
  43. data/spec/support/factories.rb +0 -1
@@ -1,58 +0,0 @@
1
- Dummy::Application.routes.draw do
2
- # The priority is based upon order of creation:
3
- # first created -> highest priority.
4
-
5
- # Sample of regular route:
6
- # match 'products/:id' => 'catalog#view'
7
- # Keep in mind you can assign values other than :controller and :action
8
-
9
- # Sample of named route:
10
- # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
11
- # This route can be invoked with purchase_url(:id => product.id)
12
-
13
- # Sample resource route (maps HTTP verbs to controller actions automatically):
14
- # resources :products
15
-
16
- # Sample resource route with options:
17
- # resources :products do
18
- # member do
19
- # get 'short'
20
- # post 'toggle'
21
- # end
22
- #
23
- # collection do
24
- # get 'sold'
25
- # end
26
- # end
27
-
28
- # Sample resource route with sub-resources:
29
- # resources :products do
30
- # resources :comments, :sales
31
- # resource :seller
32
- # end
33
-
34
- # Sample resource route with more complex sub-resources
35
- # resources :products do
36
- # resources :comments
37
- # resources :sales do
38
- # get 'recent', :on => :collection
39
- # end
40
- # end
41
-
42
- # Sample resource route within a namespace:
43
- # namespace :admin do
44
- # # Directs /admin/products/* to Admin::ProductsController
45
- # # (app/controllers/admin/products_controller.rb)
46
- # resources :products
47
- # end
48
-
49
- # You can have the root of your site routed with "root"
50
- # just remember to delete public/index.html.
51
- # root :to => 'welcome#index'
52
-
53
- # See how all your routes lay out with "rake routes"
54
-
55
- # This is a legacy wild controller route that's not recommended for RESTful applications.
56
- # Note: This route will make all actions in every controller accessible via GET requests.
57
- # match ':controller(/:action(/:id))(.:format)'
58
- end
@@ -1,46 +0,0 @@
1
- # encoding: UTF-8
2
- # This file is auto-generated from the current state of the database. Instead
3
- # of editing this file, please use the migrations feature of Active Record to
4
- # incrementally modify your database, and then regenerate this schema definition.
5
- #
6
- # Note that this schema.rb definition is the authoritative source for your
7
- # database schema. If you need to create the application database on another
8
- # system, you should be using db:schema:load, not running all the migrations
9
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
- # you'll amass, the slower it'll run and the greater likelihood for issues).
11
- #
12
- # It's strongly recommended to check this file into your version control system.
13
-
14
- ActiveRecord::Schema.define(:version => 1) do
15
-
16
- create_table "users", force: true do |t|
17
- t.string "encrypted_password"
18
- t.string "reset_password_token"
19
- t.datetime "reset_password_sent_at"
20
- t.datetime "remember_created_at"
21
- t.datetime "confirmation_sent_at"
22
- t.datetime "confirmed_at"
23
- t.string "confirmation_token"
24
- t.string "unconfirmed_email"
25
- t.integer "sign_in_count", default: 0
26
- t.datetime "current_sign_in_at"
27
- t.datetime "last_sign_in_at"
28
- t.string "current_sign_in_ip"
29
- t.string "last_sign_in_ip"
30
- t.string "email"
31
- t.string "first_name"
32
- t.string "last_name"
33
- t.integer "roles_mask", default: 0
34
- t.boolean "archived", default: false
35
- t.datetime "updated_at"
36
- t.datetime "created_at"
37
- end
38
-
39
- create_table "posts", force: true do |t|
40
- t.string "title"
41
- t.integer "roles_mask", default: 0
42
- t.datetime "updated_at"
43
- t.datetime "created_at"
44
- end
45
-
46
- end
Binary file
@@ -1,147 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe EffectiveRoles do
4
- let(:roles) { [:superadmin, :admin, :member] }
5
-
6
- let(:post) { Post.new }
7
- let(:user) { User.new.tap { |user| user.roles = [] } }
8
-
9
- let(:member) { User.new.tap { |user| user.roles = [:member] } }
10
- let(:admin) { User.new.tap { |user| user.roles = [:admin] } }
11
- let(:superadmin) { User.new.tap { |user| user.roles = [:superadmin] } }
12
-
13
- before(:each) do
14
- EffectiveRoles.setup { |config| config.roles = roles }
15
- end
16
-
17
- describe '#roles_for_roles_mask' do
18
- it 'computes the appropriate roles for the given mask' do
19
- EffectiveRoles.roles_for(nil).should eq []
20
- EffectiveRoles.roles_for(0).should eq []
21
- EffectiveRoles.roles_for(1).should eq [:superadmin]
22
- EffectiveRoles.roles_for(2).should eq [:admin]
23
- EffectiveRoles.roles_for(3).should eq [:superadmin, :admin]
24
- EffectiveRoles.roles_for(4).should eq [:member]
25
- EffectiveRoles.roles_for(5).should eq [:superadmin, :member]
26
- EffectiveRoles.roles_for(6).should eq [:admin, :member]
27
- EffectiveRoles.roles_for(7).should eq [:superadmin, :admin, :member]
28
- EffectiveRoles.roles_for(8).should eq []
29
- end
30
- end
31
-
32
- describe '#assignable_roles' do
33
- it 'uses the full Hash syntax to return the appropriate roles based on the passed User' do
34
- EffectiveRoles.setup do |config|
35
- config.assignable_roles = {
36
- 'User' => {
37
- :superadmin => [:superadmin, :admin, :member], # Superadmins may assign all roles on a User#edit screen
38
- :admin => [:admin, :member], # Admins may only assign :admin, :member on a User#edit screen
39
- :member => [] # Members can assign no roles
40
- },
41
- 'Post' => {
42
- :superadmin => [:superadmin], # Superadmins may assign ony superadmin on a Post#edit screen
43
- :admin => [:superadmin, :admin],
44
- :member => [:admin, :member]
45
- }
46
- }
47
- end
48
-
49
- # On a User#edit screen
50
- EffectiveRoles.assignable_roles_for(nil, user).should eq [:superadmin, :admin, :member]
51
- EffectiveRoles.assignable_roles_for(superadmin, user).should eq [:superadmin, :admin, :member]
52
- EffectiveRoles.assignable_roles_for(admin, user).should eq [:admin, :member]
53
- EffectiveRoles.assignable_roles_for(member, user).should eq []
54
- EffectiveRoles.assignable_roles_for(user, user).should eq []
55
-
56
- # On a Post#edit screen
57
- EffectiveRoles.assignable_roles_for(nil, post).should eq [:superadmin, :admin, :member]
58
- EffectiveRoles.assignable_roles_for(superadmin, post).should eq [:superadmin]
59
- EffectiveRoles.assignable_roles_for(admin, post).should eq [:superadmin, :admin]
60
- EffectiveRoles.assignable_roles_for(member, post).should eq [:admin, :member]
61
- EffectiveRoles.assignable_roles_for(user, post).should eq []
62
-
63
- # On an unsupported object #edit screen
64
- EffectiveRoles.assignable_roles_for(nil, nil).should eq [:superadmin, :admin, :member]
65
- EffectiveRoles.assignable_roles_for(superadmin, nil).should eq []
66
- EffectiveRoles.assignable_roles_for(admin, nil).should eq []
67
- EffectiveRoles.assignable_roles_for(member, nil).should eq []
68
- EffectiveRoles.assignable_roles_for(user, nil).should eq []
69
- end
70
-
71
- it 'uses the simple Hash syntax to return the appropriate roles based on the passed User' do
72
- EffectiveRoles.setup do |config|
73
- config.assignable_roles = {
74
- :superadmin => [:superadmin, :admin, :member], # Superadmins may assign any resource any role
75
- :admin => [:admin, :member], # Admins may only assign the :admin or :member role
76
- :member => [] # Members may not assign any roles
77
- }
78
- end
79
-
80
- EffectiveRoles.assignable_roles_for(nil).should eq [:superadmin, :admin, :member]
81
-
82
- EffectiveRoles.assignable_roles_for(superadmin).should eq [:superadmin, :admin, :member]
83
- EffectiveRoles.assignable_roles_for(admin).should eq [:admin, :member]
84
- EffectiveRoles.assignable_roles_for(member).should eq []
85
- EffectiveRoles.assignable_roles_for(user).should eq []
86
- end
87
-
88
- it 'uses the Array syntax to return the appropriate roles based on the passed User' do
89
- EffectiveRoles.setup do |config|
90
- config.assignable_roles = [:admin, :member]
91
- end
92
-
93
- EffectiveRoles.assignable_roles_for(nil).should eq [:admin, :member]
94
- EffectiveRoles.assignable_roles_for(superadmin).should eq [:admin, :member]
95
- EffectiveRoles.assignable_roles_for(admin).should eq [:admin, :member]
96
- EffectiveRoles.assignable_roles_for(member).should eq [:admin, :member]
97
- EffectiveRoles.assignable_roles_for(user).should eq [:admin, :member]
98
- end
99
-
100
- it 'uses the Nil syntax to return all roles regardless of User' do
101
- EffectiveRoles.setup do |config|
102
- config.assignable_roles = nil
103
- end
104
-
105
- EffectiveRoles.assignable_roles_for(nil).should eq roles
106
- EffectiveRoles.assignable_roles_for(superadmin).should eq roles
107
- EffectiveRoles.assignable_roles_for(admin).should eq roles
108
- EffectiveRoles.assignable_roles_for(member).should eq roles
109
- EffectiveRoles.assignable_roles_for(user).should eq roles
110
- end
111
-
112
- end
113
-
114
- describe '#disabled_roles' do
115
- it 'uses the full Hash syntax to return the appropriate roles based on the passed User' do
116
- EffectiveRoles.setup do |config|
117
- config.disabled_roles = {
118
- 'User' => [:member],
119
- 'Post' => [:superadmin],
120
- }
121
- end
122
-
123
- # On a User#edit screen
124
- EffectiveRoles.disabled_roles_for(user).should eq [:member]
125
- EffectiveRoles.disabled_roles_for(post).should eq [:superadmin]
126
- EffectiveRoles.disabled_roles_for(nil).should eq []
127
- end
128
-
129
- it 'uses the lazy Hash syntax to return the appropriate roles based on the passed User' do
130
- EffectiveRoles.setup do |config|
131
- config.disabled_roles = {
132
- 'User' => :member,
133
- 'Post' => :superadmin,
134
- }
135
- end
136
-
137
- # On a User#edit screen
138
- EffectiveRoles.disabled_roles_for(user).should eq [:member]
139
- EffectiveRoles.disabled_roles_for(post).should eq [:superadmin]
140
- EffectiveRoles.disabled_roles_for(nil).should eq []
141
- end
142
-
143
- end
144
-
145
-
146
-
147
- end
@@ -1,218 +0,0 @@
1
- describe 'Acts As Role Restricted' do
2
- let(:roles) { [:superadmin, :admin, :member] }
3
-
4
- let(:user) { User.new.tap { |user| user.roles = [] } }
5
- let(:member) { User.new.tap { |user| user.roles = [:member] } }
6
- let(:admin) { User.new.tap { |user| user.roles = [:admin] } }
7
- let(:superadmin) { User.new.tap { |user| user.roles = [:superadmin] } }
8
- let(:member_and_admin) { User.new.tap { |user| user.roles = [:member, :admin] } }
9
-
10
- before(:each) do
11
- EffectiveRoles.setup { |config| config.roles = roles }
12
- end
13
-
14
- describe '#is_any?(roles)' do
15
- context 'when subject has one of the roles in question' do
16
- let(:post) { Post.new.tap { |post| post.roles = [:member] } }
17
-
18
- it 'is true' do
19
- post.is_any?(:admin, :member).should be(true)
20
- end
21
- end
22
-
23
- context 'when subject does not have any of the roles in question' do
24
- let(:post) { Post.new.tap { |post| post.roles = [:member] } }
25
-
26
- it 'is false' do
27
- post.is_any?(:admin, :superadmin).should be(false)
28
- end
29
- end
30
-
31
- context 'when subject does not have any roles' do
32
- let(:post) { Post.new }
33
-
34
- it 'is false' do
35
- post.is_any?(:member, :admin, :superadmin).should be(false)
36
- end
37
- end
38
- end
39
-
40
- describe '#roles_permit?(obj)' do
41
- describe 'when subject has no roles' do
42
- let(:post) { Post.new }
43
-
44
- it 'should be true when passed nil' do
45
- post.roles_permit?(nil).should eq true
46
- end
47
-
48
- it 'should be true for any user' do
49
- post.roles_permit?(user).should eq true
50
- post.roles_permit?(member).should eq true
51
- post.roles_permit?(admin).should eq true
52
- post.roles_permit?(superadmin).should eq true
53
- end
54
- end
55
-
56
- describe 'when subject has one role' do
57
- let(:post) { Post.new.tap { |post| post.roles = [:member] } }
58
-
59
- it 'should be false when passed nil' do
60
- post.roles_permit?(nil).should eq false
61
- end
62
-
63
- it 'should be false when passed object doesnt share roles' do
64
- post.roles_permit?(user).should eq false
65
- post.roles_permit?(admin).should eq false
66
- post.roles_permit?(superadmin).should eq false
67
- end
68
-
69
- it 'should be true for a user with all the same roles' do
70
- post.roles_permit?(member).should eq true
71
- post.roles_permit?(member_and_admin).should eq true
72
- end
73
- end
74
-
75
- describe 'when subject has multiple roles' do
76
- let(:post) { Post.new.tap { |post| post.roles = [:member, :admin] } }
77
-
78
- it 'should be false when passed nil' do
79
- post.roles_permit?(nil).should eq false
80
- end
81
-
82
- it 'should be false when passed object doesnt share all roles' do
83
- post.roles_permit?(user).should eq false
84
- post.roles_permit?(superadmin).should eq false
85
- end
86
-
87
- it 'should be true for a user with overlapping roles' do
88
- post.roles_permit?(member).should eq true
89
- post.roles_permit?(admin).should eq true
90
- post.roles_permit?(member_and_admin).should eq true
91
- end
92
- end
93
- end
94
-
95
- describe '#roles_overlap?(obj)' do
96
- describe 'when subject has no roles' do
97
- let(:post) { Post.new }
98
-
99
- it 'should be true when passed nil' do
100
- post.roles_overlap?(nil).should eq true
101
- end
102
-
103
- it 'should be true when user has no roles either' do
104
- post.roles_overlap?(user).should eq true
105
- end
106
-
107
- it 'should be false for any user with roles' do
108
- post.roles_overlap?(member).should eq false
109
- post.roles_overlap?(admin).should eq false
110
- post.roles_overlap?(superadmin).should eq false
111
- end
112
- end
113
-
114
- describe 'when subject has one role' do
115
- let(:post) { Post.new.tap { |post| post.roles = [:member] } }
116
-
117
- it 'should be false when passed nil' do
118
- post.roles_overlap?(nil).should eq false
119
- end
120
-
121
- it 'should be false when passed object doesnt share roles' do
122
- post.roles_overlap?(user).should eq false
123
- post.roles_overlap?(admin).should eq false
124
- post.roles_overlap?(superadmin).should eq false
125
- end
126
-
127
- it 'should be true for a user with all the same roles' do
128
- post.roles_overlap?(member).should eq true
129
- post.roles_overlap?(member_and_admin).should eq true
130
- end
131
- end
132
-
133
- describe 'when subject has multiple roles' do
134
- let(:post) { Post.new.tap { |post| post.roles = [:member, :admin] } }
135
-
136
- it 'should be false when passed nil' do
137
- post.roles_overlap?(nil).should eq false
138
- end
139
-
140
- it 'should be false when passed object doesnt share all roles' do
141
- post.roles_overlap?(user).should eq false
142
- post.roles_overlap?(superadmin).should eq false
143
- end
144
-
145
- it 'should be true for a user with overlapping roles' do
146
- post.roles_overlap?(member).should eq true
147
- post.roles_overlap?(admin).should eq true
148
- post.roles_overlap?(member_and_admin).should eq true
149
- end
150
- end
151
- end
152
-
153
-
154
- describe '#roles_match?(obj)' do
155
- describe 'when subject has no roles' do
156
- let(:post) { Post.new }
157
-
158
- it 'should be true when passed nil' do
159
- post.roles_match?(nil).should eq true
160
- end
161
-
162
- it 'should be true when user has no roles either' do
163
- post.roles_match?(user).should eq true
164
- end
165
-
166
- it 'should be false for any user with roles' do
167
- post.roles_match?(member).should eq false
168
- post.roles_match?(admin).should eq false
169
- post.roles_match?(superadmin).should eq false
170
- end
171
- end
172
-
173
- describe 'when subject has one role' do
174
- let(:post) { Post.new.tap { |post| post.roles = [:member] } }
175
-
176
- it 'should be false when passed nil' do
177
- post.roles_match?(nil).should eq false
178
- end
179
-
180
- it 'should be false when passed object doesnt share roles' do
181
- post.roles_match?(user).should eq false
182
- post.roles_match?(admin).should eq false
183
- post.roles_match?(superadmin).should eq false
184
- end
185
-
186
- it 'should be true for a user with all the same roles' do
187
- post.roles_match?(member).should eq true
188
- end
189
-
190
- it 'should be false when the user has more roles' do
191
- post.roles_match?(member_and_admin).should eq false
192
- end
193
- end
194
-
195
- describe 'when subject has multiple roles' do
196
- let(:post) { Post.new.tap { |post| post.roles = [:member, :admin] } }
197
-
198
- it 'should be false when passed nil' do
199
- post.roles_match?(nil).should eq false
200
- end
201
-
202
- it 'should be false when passed object doesnt share all roles' do
203
- post.roles_match?(user).should eq false
204
- post.roles_match?(superadmin).should eq false
205
- post.roles_match?(member).should eq false
206
- post.roles_match?(admin).should eq false
207
- end
208
-
209
- it 'should be true for a user with same roles' do
210
- post.roles_match?(member_and_admin).should eq true
211
- end
212
- end
213
- end
214
-
215
-
216
-
217
-
218
- end