the_role 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  ## TheRole - Authorization Gem for Ruby on Rails with administrative interface.
2
2
 
3
- [rubygems](http://rubygems.org/gems/the_role) | [ruby-toolbox](https://www.ruby-toolbox.com/categories/rails_authorization) | [![Build Status](https://travis-ci.org/the-teacher/the_role.png?branch=master)](https://travis-ci.org/the-teacher/the_role)
3
+ [![Gem Version](https://badge.fury.io/rb/the_role.png)](http://badge.fury.io/rb/the_role) | [![Build Status](https://travis-ci.org/the-teacher/the_role.png?branch=master)](https://travis-ci.org/the-teacher/the_role) | [![Code Climate](https://codeclimate.com/github/the-teacher/the_role.png)](https://codeclimate.com/github/the-teacher/the_role) | [ruby-toolbox](https://www.ruby-toolbox.com/categories/rails_authorization)
4
4
 
5
5
  ### Semantic, Flexible, Lightweight
6
6
 
7
+ ### INTRO
8
+
7
9
  <table>
8
10
  <tr>
9
11
  <th align="left">Bye bye CanCan, I got The Role!</th>
@@ -15,53 +17,75 @@
15
17
  </tr>
16
18
  </table>
17
19
 
18
- ### Stabile versions
20
+ ### GUI
19
21
 
20
- **Rails 4**
22
+ <table>
23
+ <tr>
24
+ <td>TheRole management web interface => localhost:3000/admin/roles</td>
25
+ </tr>
26
+ <tr>
27
+ <td><img src="https://github.com/the-teacher/the_role/raw/master/pic.png" alt="TheRole"></td>
28
+ </tr>
29
+ </table>
21
30
 
22
- Stabile, tested, configurable. I like it ;)
31
+ puts following yields into your layout:
23
32
 
33
+ ```ruby
34
+ = yield :role_sidebar
35
+ = yield :role_main
24
36
  ```
25
- gem "the_role", "~> 2.0.0"
26
- ```
27
-
28
- **Rails 3**
29
37
 
30
- First prototype. Not recommended for use.
38
+ ### Rails 4 version
31
39
 
32
40
  ```
33
- gem "the_role", "~> 1.7.0"
41
+ gem 'the_role', '~> 2.0.0'
34
42
  ```
35
43
 
36
- ### TheRole instead CanCan?
44
+ [Rails 3 version](http://rubygems.org/gems/the_role/versions/1.7.0) (not recommended for use)
37
45
 
38
- I think, **CanCan** it's classic solution **for programmers**. It's great for many projects! But...
46
+ ### Instalation
39
47
 
40
- For endpoint users (moderators, admins) CanCan is useless, because it's hasn't default simple User Interface for role management.
48
+ * [INSTALL](#install)
49
+ * [INTEGRATION](#integration)
50
+ * [Assets and Bootstrap](#assets-and-bootstrap)
51
+ * [Configuration (optional)](#configuration)
41
52
 
42
- **TheRole** oriented **to people**. TheRole inspired by Rails **MVC** structure. If you need simple, powerful and flexible authorization system - TheRole can be useful for you.
53
+ ### Understanding
43
54
 
44
- ### GUI
55
+ * [TheRole instead CanCan?](#therole-instead-cancan)
56
+ * [What does it mean semantic?](#what-does-it-mean-semantic)
57
+ * [Virtual sections and rules](#virtual-sections-and-rules)
58
+ * [Using with Views](#using-with-views)
59
+ * [Who is Administrator?](#who-is-administrator)
60
+ * [Who is Moderator?](#who-is-moderator)
61
+ * [Who is Owner?](#who-is-owner)
45
62
 
46
- <table>
47
- <tr>
48
- <td>TheRole management web interface => localhost:3000/admin/roles</td>
49
- </tr>
50
- <tr>
51
- <td><img src="https://github.com/the-teacher/the_role/raw/master/pic.png" alt="TheRole"></td>
52
- </tr>
53
- </table>
63
+ ### API
64
+
65
+ * [User](#user)
66
+ * [Role](#role)
54
67
 
55
68
  ## Install
56
69
 
57
- ``` ruby
70
+ ```ruby
71
+ # Optional for UI.
72
+ # You can use any Bootstrap version (CSS, LESS, SCSS)
73
+ # You can find required components below
74
+ gem 'bootstrap-sass', '~> 2.3.1.0'
75
+
58
76
  gem "the_role", "~> 2.0.0"
59
77
  ```
60
78
 
61
- ``` ruby
79
+ ```ruby
62
80
  bundle
63
81
  ```
64
82
 
83
+ install note
84
+
85
+ ```
86
+ bundle exec rails g the_role --help
87
+ ```
88
+
65
89
  ### Change User migration
66
90
 
67
91
  Add **role_id:integer** field to your User Model
@@ -69,33 +93,25 @@ Add **role_id:integer** field to your User Model
69
93
  ```ruby
70
94
  def self.up
71
95
  create_table :users do |t|
72
- t.string :login, :null => false
73
- t.string :email, :default => nil
74
- t.string :crypted_password, :default => nil
75
- t.string :salt, :default => nil
96
+ t.string :login
97
+ t.string :email
98
+ t.string :crypted_password
99
+ t.string :salt
76
100
 
77
101
  # TheRole field
78
- t.integer :role_id, :default => nil
102
+ t.integer :role_id
79
103
 
80
104
  t.timestamps
81
105
  end
82
106
  end
83
107
  ```
84
108
 
85
- ### Role Model
109
+ ### Create Role model
86
110
 
87
111
  Generate Role model
88
112
 
89
- ``` ruby
90
- rails g model role --migration=false
91
- ```
92
-
93
- Change your Role model
94
-
95
113
  ```ruby
96
- class Role < ActiveRecord::Base
97
- include RoleModel
98
- end
114
+ bundle exec rails g the_role install
99
115
  ```
100
116
 
101
117
  install TheRole migrations
@@ -104,44 +120,33 @@ install TheRole migrations
104
120
  rake the_role_engine:install:migrations
105
121
  ```
106
122
 
107
- ### Invoke migration
123
+ Invoke migration
108
124
 
109
125
  ```ruby
110
- rake db:create && rake db:migrate
126
+ rake db:migrate
111
127
  ```
112
128
 
113
- ### Create Admin Role
129
+ ### Create Admin
114
130
 
115
- ```
116
- bin/rails c
117
- ```
118
-
119
- ``` ruby
120
- role = Role.new
121
- role.name = "admin"
122
- role.title = "role for admin"
123
- role.description = "this user can do anything"
124
- role.save
131
+ Create admin role
125
132
 
126
- role.create_rule(:system, :administrator)
127
- role.rule_on(:system, :administrator)
128
-
129
- role.admin? # => true
133
+ ```
134
+ bundle exec rails g the_role admin
130
135
  ```
131
136
 
132
- ### Makes any user as Admin
137
+ Makes any user as Admin
133
138
 
134
139
  ```
135
140
  User.first.update( role: Role.with_name(:admin) )
136
141
  ```
137
142
 
138
- ### Change your ApplicationController
143
+ ## Integration
139
144
 
140
- **include TheRoleController** in your Application controller
145
+ #### Change your ApplicationController
141
146
 
142
- Define aliases method for correctly work TheRole's controllers
147
+ **include TheRoleController** in your Application controller
143
148
 
144
- ``` ruby
149
+ ```ruby
145
150
  class ApplicationController < ActionController::Base
146
151
  include TheRoleController
147
152
 
@@ -152,27 +157,29 @@ class ApplicationController < ActionController::Base
152
157
  return render(text: 'access_denied: requires an role')
153
158
  end
154
159
 
155
- # 1) LOGIN_REQUIRE => authenticate_user! for Devise
156
- # 2) LOGIN_REQUIRE => require_login for Sorcery
160
+ # 1) LOGIN_REQUIRE => authenticate_user! for Devise
161
+ # 2) LOGIN_REQUIRE => require_login for Sorcery
162
+ # 3) LOGIN_REQUIRE => user_require_method for other Authentication solution
157
163
 
164
+ # Define aliases method for correctly work TheRole's controllers
158
165
  alias_method :login_required, :LOGIN_REQUIRE
159
166
  alias_method :role_access_denied, :access_denied
160
167
  end
161
168
  ```
162
169
 
163
- ### Using with any controller
170
+ #### Using with any controller
164
171
 
165
- ``` ruby
172
+ ```ruby
166
173
  class PagesController < ApplicationController
167
- before_filter :login_required, :except => [:index, :show]
168
- before_filter :role_required, :except => [:index, :show]
174
+ before_action :login_required, except: [:index, :show]
175
+ before_action :role_required, except: [:index, :show]
169
176
 
170
- before_filter :find_page, :only => [:edit, :update, :destroy]
171
- before_filter :owner_required, :only => [:edit, :update, :destroy]
177
+ before_action :set_page, only: [:edit, :update, :destroy]
178
+ before_action :owner_required, only: [:edit, :update, :destroy]
172
179
 
173
180
  private
174
181
 
175
- def find_page
182
+ def set_page
176
183
  @page = Page.find params[:id]
177
184
 
178
185
  # TheRole: You should define OWNER CHECK OBJECT
@@ -183,20 +190,103 @@ class PagesController < ApplicationController
183
190
  end
184
191
  ```
185
192
 
186
- ## Configuration
193
+ ### Assets and Bootstrap
194
+
195
+ **application.css**
196
+
197
+ ```
198
+ //= require the_role/bootstrap_sass
199
+ //= require the_role
200
+ ```
201
+
202
+ If you not use **bootstrap-sass** gem you should to add following componetns from your bootstrap version instead **the_role/bootstrap_sass**:
203
+
204
+ ```
205
+ bootstrap/variables
206
+ bootstrap/mixins
207
+ bootstrap/reset
208
+
209
+ bootstrap/scaffolding
210
+ bootstrap/grid
211
+ bootstrap/layouts
212
+
213
+ bootstrap/navs
214
+ bootstrap/wells
215
+ bootstrap/forms
216
+ bootstrap/close
217
+ bootstrap/tables
218
+ bootstrap/navbar
219
+ bootstrap/dropdowns
220
+
221
+ bootstrap/alerts
222
+ bootstrap/buttons
223
+ bootstrap/button-groups
224
+ ```
225
+
226
+ ### Configuration
187
227
 
188
228
  config/initializers/the_role.rb
189
229
 
190
230
  ```ruby
191
231
  TheRole.configure do |config|
192
- config.layout = :application
193
- config.default_user_role = :user
232
+ config.layout = :application # default Layout for TheRole UI
233
+ config.default_user_role = nil # set default role (name)
194
234
  end
195
235
  ```
196
236
 
197
- ## Understanding
237
+ ## Understanding
238
+
239
+ #### TheRole instead CanCan?
198
240
 
199
- ### Using with Views
241
+ TheRole in contrast to CanCan has simple and predefined way to find access state for current role. If you didn't want to create your own role scheme with CanCan Abilities - TheRole can be great solution for your.
242
+
243
+ You can manage roles with simple UI. TheRole's ACL structure inspired by Rails controllers, that is why it's so great for Rails application.
244
+
245
+ #### What does it mean semantic?
246
+
247
+ Semantic - the science of meaning. Human should fast to understand what is happening in a role system.
248
+
249
+ Look at next Role hash. If you can understand access rules - this authorization system is semantically.
250
+
251
+ ```ruby
252
+ role = {
253
+ 'pages' => {
254
+ 'index' => true,
255
+ 'show' => true,
256
+ 'new' => false,
257
+ 'edit' => false,
258
+ 'update' => false,
259
+ 'destroy' => false
260
+ },
261
+ 'articles' => {
262
+ 'index' => true,
263
+ 'show' => true
264
+ },
265
+ 'twitter' => {
266
+ 'button' => true,
267
+ 'follow' => false
268
+ }
269
+ }
270
+ ```
271
+
272
+ #### Virtual sections and rules
273
+
274
+ Usually, we use real names of controllers and actions for names of sections and rules:
275
+
276
+ ```ruby
277
+ @user.has_role?(:pages, :show)
278
+ ```
279
+
280
+ But, also, you can use virtual names of sections, and virtual names of section's rules.
281
+
282
+ ```ruby
283
+ @user.has_role?(:twitter, :button)
284
+ @user.has_role?(:facebook, :like)
285
+ ```
286
+
287
+ And you can use them as well as other access rules.
288
+
289
+ #### Using with Views
200
290
 
201
291
  ```ruby
202
292
  <% if @user.has_role?(:twitter, :button) %>
@@ -206,7 +296,7 @@ end
206
296
  <% end %>
207
297
  ```
208
298
 
209
- ### Who is Administrator?
299
+ #### Who is Administrator?
210
300
 
211
301
  Administrator it's a user who can access any section and the rules of your application.
212
302
 
@@ -215,7 +305,7 @@ Administrator is the owner of any objects in your application.
215
305
  Administrator it's a user, which has virtual section **system** and rule **administrator** in the role-hash.
216
306
 
217
307
 
218
- ``` ruby
308
+ ```ruby
219
309
  admin_role_fragment = {
220
310
  :system => {
221
311
  :administrator => true
@@ -223,7 +313,7 @@ admin_role_fragment = {
223
313
  }
224
314
  ```
225
315
 
226
- ### Who is Moderator?
316
+ #### Who is Moderator?
227
317
 
228
318
  Moderator it's a user, which has access to any actions of some section(s).
229
319
 
@@ -233,7 +323,7 @@ Moderator it's a user, which has a virtual section **moderator**, with **section
233
323
 
234
324
  There is Moderator of Pages (controller) and Twitter (virtual section)
235
325
 
236
- ``` ruby
326
+ ```ruby
237
327
  moderator_role_fragment = {
238
328
  :moderator => {
239
329
  :pages => true,
@@ -243,7 +333,7 @@ moderator_role_fragment = {
243
333
  }
244
334
  ```
245
335
 
246
- ### Who is Owner?
336
+ #### Who is Owner?
247
337
 
248
338
  Administrator is owner of any object in system.
249
339
 
@@ -251,135 +341,96 @@ Moderator of pages is owner of any page.
251
341
 
252
342
  User is owner of object, when **Object#user_id == User#id**.
253
343
 
254
- ## What does it mean semantic?
255
344
 
256
- Semantic - the science of meaning. Human should fast to understand what is happening in a role system.
345
+ # API
257
346
 
258
- Look at next Role hash. If you can understand access rules - this authorization system is semantically.
347
+ ## User
259
348
 
260
- ``` ruby
261
- role = {
262
- 'pages' => {
263
- 'index' => true,
264
- 'show' => true,
265
- 'new' => false,
266
- 'edit' => false,
267
- 'update' => false,
268
- 'destroy' => false
269
- },
270
- 'articles' => {
271
- 'index' => true,
272
- 'show' => true
273
- },
274
- 'twitter' => {
275
- 'button' => true,
276
- 'follow' => false
277
- }
278
- }
279
- ```
280
-
281
- ### Virtual sections and rules
282
-
283
- Usually, we use real names of controllers and actions for names of sections and rules:
284
-
285
- ``` ruby
286
- current_user.has_role?(:pages, :show)
287
- ```
288
-
289
- But, also, you can use virtual names of sections, and virtual names of section's rules.
290
-
291
- ``` ruby
292
- current_user.has_role?(:twitter, :button)
293
- current_user.has_role?(:facebook, :like)
349
+ ```ruby
350
+ # User's role
351
+ @user.role # => Role obj
294
352
  ```
295
353
 
296
- And you can use them as well as other access rules.
297
-
298
- # User Model methods
299
-
300
- Has a user an access to **rule** of **section** (action of controller)?
354
+ Is it Administrator?
301
355
 
302
- ``` ruby
303
- current_user.has_role?(:pages, :show) => true | false
304
- current_user.has_role?(:blogs, :new) => true | false
305
- current_user.has_role?(:articles, :edit) => true | false
356
+ ```ruby
357
+ @user.admin? => true | false
306
358
  ```
307
359
 
308
360
  Is it Moderator?
309
361
 
310
- ``` ruby
311
- current_user.moderator?(:pages) => true | false
312
- current_user.moderator?(:blogs) => true | false
313
- current_user.moderator?(:articles) => true | false
362
+ ```ruby
363
+ @user.moderator?(:pages) => true | false
364
+ @user.moderator?(:blogs) => true | false
365
+ @user.moderator?(:articles) => true | false
314
366
  ```
315
367
 
316
- Is it Administrator?
368
+ Has a user an access to **rule** of **section** (action of controller)?
317
369
 
318
- ``` ruby
319
- current_user.admin? => true | false
370
+ ```ruby
371
+ @user.has_role?(:pages, :show) => true | false
372
+ @user.has_role?(:blogs, :new) => true | false
373
+ @user.has_role?(:articles, :edit) => true | false
320
374
  ```
321
375
 
322
376
  Is it **Owner** of object?
323
377
 
324
- ``` ruby
325
- current_user.owner?(@page) => true | false
326
- current_user.owner?(@blog) => true | false
327
- current_user.owner?(@article) => true | false
378
+ ```ruby
379
+ @user.owner?(@page) => true | false
380
+ @user.owner?(@blog) => true | false
381
+ @user.owner?(@article) => true | false
328
382
  ```
329
383
 
330
- # Base Role methods
331
-
332
- ``` ruby
333
- # User's role
334
- @role = current_user.role
335
- ```
384
+ ## Role
336
385
 
337
- ``` ruby
386
+ ```ruby
338
387
  # Find a Role by name
339
- @role = Role.find_by_name(:user)
388
+ @role = Role.with_name(:user)
340
389
  ```
341
390
 
342
- ``` ruby
391
+ ```ruby
343
392
  @role.has?(:pages, :show) => true | false
344
393
  @role.moderator?(:pages) => true | false
345
394
  @role.admin? => true | false
346
395
  ```
347
396
 
348
- # CRUD API (for console users)
349
-
350
397
  #### CREATE
351
398
 
352
- ``` ruby
399
+ ```ruby
353
400
  # Create a section of rules
354
401
  @role.create_section(:pages)
355
402
  ```
356
403
 
357
- ``` ruby
404
+ ```ruby
358
405
  # Create rule in section (false value by default)
359
406
  @role.create_rule(:pages, :index)
360
407
  ```
361
408
 
362
409
  #### READ
363
410
 
364
- ``` ruby
411
+ ```ruby
365
412
  @role.to_hash => Hash
366
413
 
367
414
  # JSON string
368
415
  @role.to_json => String
369
416
 
370
- # JSON string
371
- @role.to_s => String
372
-
373
417
  # check method
374
418
  @role.has_section?(:pages) => true | false
375
-
376
- # check method
377
- @role.has_rule?(:pages, :index) => true | false
378
419
  ```
379
420
 
380
421
  #### UPDATE
381
422
 
382
- ``` ruby
423
+ ```ruby
424
+ # set this rule on true
425
+ @role.rule_on(:pages, :index)
426
+ ```
427
+
428
+ ```ruby
429
+ # set this rule on false
430
+ @role.rule_off(:pages, :index)
431
+ ```
432
+
433
+ ```ruby
383
434
  # Incoming hash is true-mask-hash
384
435
  # All rules of Role will be reset to false
385
436
  # Only rules from true-mask-hash will be set on true
@@ -393,19 +444,9 @@ new_role_hash = {
393
444
  @role.update_role(new_role_hash)
394
445
  ```
395
446
 
396
- ``` ruby
397
- # set this rule on true
398
- @role.rule_on(:pages, :index)
399
- ```
400
-
401
- ``` ruby
402
- # set this rule on false
403
- @role.rule_off(:pages, :index)
404
- ```
447
+ #### DELETE
405
448
 
406
- ### DELETE
407
-
408
- ``` ruby
449
+ ```ruby
409
450
  # delete a section
410
451
  @role.delete_section(:pages)
411
452
 
@@ -413,8 +454,10 @@ new_role_hash = {
413
454
  @role.delete_rule(:pages, :show)
414
455
  ```
415
456
 
416
- ### Changelog
457
+ #### Changelog
417
458
 
459
+ * 2.0.2 - code cleanup, readme
460
+ * 2.0.1 - code cleanup
418
461
  * 2.0.0 - Rails 4 ready, configurable, tests
419
462
  * 1.7.0 - mass assignment for User#role_id, doc, locales, changes in test app
420
463
  * 1.6.9 - assets precompile addon
@@ -0,0 +1,20 @@
1
+ @import "bootstrap/variables";
2
+ @import "bootstrap/mixins";
3
+ @import "bootstrap/reset";
4
+
5
+ @import "bootstrap/scaffolding";
6
+ @import "bootstrap/grid";
7
+ @import "bootstrap/layouts";
8
+
9
+ @import "bootstrap/navs";
10
+ @import "bootstrap/wells";
11
+ @import "bootstrap/forms";
12
+ @import "bootstrap/close";
13
+ @import "bootstrap/tables";
14
+ @import "bootstrap/navbar";
15
+ @import "bootstrap/dropdowns";
16
+
17
+ @import "bootstrap/alerts";
18
+ @import "bootstrap/buttons";
19
+ @import "bootstrap/button-groups";
20
+
@@ -5,8 +5,9 @@ class Admin::RoleSectionsController < ApplicationController
5
5
  before_filter :login_required
6
6
  before_filter :role_required
7
7
 
8
- before_filter :role_find, only: [:create, :create_rule, :rule_on, :rule_off, :destroy, :destroy_rule]
9
- before_filter :owner_required, only: [:create, :create_rule, :rule_on, :rule_off, :destroy, :destroy_rule]
8
+ before_filter :section_rule_names, only: [:rule_on, :rule_off, :destroy_rule]
9
+ before_filter :role_find, only: [:create, :create_rule, :rule_on, :rule_off, :destroy, :destroy_rule]
10
+ before_filter :owner_required, only: [:create, :create_rule, :rule_on, :rule_off, :destroy, :destroy_rule]
10
11
 
11
12
  def create
12
13
  if @role.create_section params[:section_name]
@@ -14,6 +15,7 @@ class Admin::RoleSectionsController < ApplicationController
14
15
  else
15
16
  flash[:error] = t 'the_role.section_not_created'
16
17
  end
18
+
17
19
  redirect_to_edit
18
20
  end
19
21
 
@@ -23,28 +25,37 @@ class Admin::RoleSectionsController < ApplicationController
23
25
  else
24
26
  flash[:error] = t 'the_role.section_rule_not_created'
25
27
  end
28
+
26
29
  redirect_to_edit
27
30
  end
28
31
 
29
32
  def rule_on
30
- section_name = params[:id]
31
- rule_name = params[:name]
32
- if @role.rule_on section_name, rule_name
33
+ if @role.rule_on @section_name, @rule_name
33
34
  flash[:notice] = t 'the_role.section_rule_on'
34
35
  else
35
36
  flash[:error] = t 'the_role.state_not_changed'
36
37
  end
38
+
37
39
  redirect_to_edit
38
40
  end
39
41
 
40
42
  def rule_off
41
- section_name = params[:id]
42
- rule_name = params[:name]
43
- if @role.rule_off section_name, rule_name
43
+ if @role.rule_off @section_name, @rule_name
44
44
  flash[:notice] = t 'the_role.section_rule_off'
45
45
  else
46
46
  flash[:error] = t 'the_role.state_not_changed'
47
47
  end
48
+
49
+ redirect_to_edit
50
+ end
51
+
52
+ def destroy_rule
53
+ if @role.delete_rule @section_name, @rule_name
54
+ flash[:notice] = t 'the_role.section_rule_deleted'
55
+ else
56
+ flash[:error] = t 'the_role.section_rule_not_deleted'
57
+ end
58
+
48
59
  redirect_to_edit
49
60
  end
50
61
 
@@ -58,19 +69,13 @@ class Admin::RoleSectionsController < ApplicationController
58
69
  redirect_to_edit
59
70
  end
60
71
 
61
- def destroy_rule
62
- section_name = params[:id]
63
- rule_name = params[:name]
64
- if @role.delete_rule section_name, rule_name
65
- flash[:notice] = t 'the_role.section_rule_deleted'
66
- else
67
- flash[:error] = t 'the_role.section_rule_not_deleted'
68
- end
69
- redirect_to_edit
70
- end
71
-
72
72
  protected
73
73
 
74
+ def section_rule_names
75
+ @section_name = params[:id]
76
+ @rule_name = params[:name]
77
+ end
78
+
74
79
  def role_find
75
80
  @role = Role.find params[:role_id]
76
81
 
@@ -10,6 +10,16 @@ This text:
10
10
 
11
11
  Generators:
12
12
  bundle exec rails g the_role install
13
+ - Install config file and models
14
+
15
+ bundle exec rails g the_role setup
16
+ - Install config file
17
+
18
+ bundle exec rails g the_role models
19
+ - Install models
20
+
21
+ bundle exec rails g the_role admin
22
+ - Create Admin Role
13
23
 
14
24
  Migrations:
15
25
  bundle exec rake the_role_engine:install:migrations
@@ -0,0 +1,3 @@
1
+ class Role < ActiveRecord::Base
2
+ include RoleModel
3
+ end
@@ -1,5 +1,6 @@
1
1
  # TheRole.config.param_name => value
2
2
 
3
3
  TheRole.configure do |config|
4
- config.layout = 'the_role'
4
+ config.layout = :application # default Layout for TheRole UI
5
+ config.default_user_role = nil # set default role (name)
5
6
  end
@@ -5,6 +5,13 @@ class TheRoleGenerator < Rails::Generators::NamedBase
5
5
  def generate_controllers
6
6
  if gen_name == 'install'
7
7
  cp_setup
8
+ cp_models
9
+ elsif gen_name == 'setup'
10
+ cp_setup
11
+ elsif gen_name == 'models'
12
+ cp_models
13
+ elsif gen_name == 'admin'
14
+ create_admin_role
8
15
  else
9
16
  puts 'TheComments Generator - wrong Name'
10
17
  puts 'Try to use install'
@@ -17,7 +24,38 @@ class TheRoleGenerator < Rails::Generators::NamedBase
17
24
  name.to_s.downcase
18
25
  end
19
26
 
27
+ def cp_models
28
+ copy_file 'role.rb', 'app/models/role.rb'
29
+ end
30
+
20
31
  def cp_setup
21
32
  copy_file 'the_role.rb', 'config/initializers/the_role.rb'
22
33
  end
34
+
35
+ def create_admin_role
36
+ puts `clear`
37
+ puts '~'*40
38
+ puts 'TheRole'
39
+ puts '~'*40
40
+
41
+ unless Role.with_name(:admin)
42
+ role = Role.create(
43
+ name: :admin,
44
+ title: "role for admin",
45
+ description:"this user can do anything"
46
+ )
47
+
48
+ role.create_rule(:system, :administrator)
49
+ role.rule_on(:system, :administrator)
50
+
51
+ puts "Admin role created"
52
+ else
53
+ puts "Admin role exists"
54
+ end
55
+
56
+ puts "Now you can makes any user as Admin:"
57
+ puts "> bin/rails c"
58
+ puts "> User.first.update( role: Role.with_name(:admin) )"
59
+ puts '~'*40
60
+ end
23
61
  end
@@ -1,3 +1,3 @@
1
1
  module TheRole
2
- VERSION = "2.0.1"
2
+ VERSION = "2.0.2"
3
3
  end
data/the_role.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Ilya N. Zykin [the-teacher]"]
9
9
  s.email = ["zykin-ilya@ya.ru"]
10
10
  s.homepage = "https://github.com/the-teacher/the_role"
11
- s.summary = %q{Authorization lib for Rails 4}
12
- s.description = %q{Authorization lib for Rails 4 with Web Interface}
11
+ s.summary = %q{Authorization for Rails 4}
12
+ s.description = %q{Authorization for Rails 4 with Web Interface}
13
13
 
14
14
  s.rubyforge_project = "the_role"
15
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: the_role
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-24 00:00:00.000000000 Z
12
+ date: 2013-05-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: haml
@@ -27,7 +27,7 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
- description: Authorization lib for Rails 4 with Web Interface
30
+ description: Authorization for Rails 4 with Web Interface
31
31
  email:
32
32
  - zykin-ilya@ya.ru
33
33
  executables: []
@@ -42,6 +42,7 @@ files:
42
42
  - README.md
43
43
  - Rakefile
44
44
  - app/assets/stylesheets/the_role.css.scss
45
+ - app/assets/stylesheets/the_role/bootstrap_sass.css.scss
45
46
  - app/controllers/admin/role_sections_controller.rb
46
47
  - app/controllers/admin/roles_controller.rb
47
48
  - app/controllers/the_role_controller.rb
@@ -54,7 +55,6 @@ files:
54
55
  - app/views/admin/roles/edit.html.haml
55
56
  - app/views/admin/roles/index.haml
56
57
  - app/views/admin/roles/new.html.haml
57
- - app/views/layouts/the_role.html.haml
58
58
  - config/locales/en.yml
59
59
  - config/locales/es.yml
60
60
  - config/locales/ru.yml
@@ -62,6 +62,7 @@ files:
62
62
  - config/routes.rb
63
63
  - db/migrate/20111025025129_create_roles.rb
64
64
  - lib/generators/the_role/USAGE
65
+ - lib/generators/the_role/templates/role.rb
65
66
  - lib/generators/the_role/templates/the_role.rb
66
67
  - lib/generators/the_role/the_role_generator.rb
67
68
  - lib/tasks/roles.rake
@@ -96,5 +97,5 @@ rubyforge_project: the_role
96
97
  rubygems_version: 1.8.25
97
98
  signing_key:
98
99
  specification_version: 3
99
- summary: Authorization lib for Rails 4
100
+ summary: Authorization for Rails 4
100
101
  test_files: []
@@ -1,36 +0,0 @@
1
- !!! 5
2
- %html
3
- %head
4
- %meta{ :charset => 'utf-8' }
5
- %title Bye bye, CanCan, I got the Role!
6
- = stylesheet_link_tag 'admin_the_role'
7
- = javascript_include_tag 'admin_the_role'
8
- = csrf_meta_tags
9
- %body
10
- .the_role
11
- %h3
12
- = link_to 'The Role', 'https://github.com/the-teacher/the_role'
13
- \|
14
- Role system for Rails Apps
15
- \|
16
- - u = current_user
17
- User: #{u.try(:name) || u.try(:username) || u.try(:login)|| u.try(:email) || u.id}
18
- \|
19
- = I18n.locale
20
- .crusty
21
- .container
22
-
23
- - if flash[:notice]
24
- .alert.alert-success
25
- %a.close{:href => '#', 'data-dismiss' => :alert } &times;
26
- = flash[:notice]
27
-
28
- - if flash[:error]
29
- .alert.alert-error
30
- %a.close{:href => '#', 'data-dismiss' => :alert } &times;
31
- = flash[:error]
32
- .row
33
- .span3
34
- .sidebar= yield :sidebar
35
- .span9
36
- .content= yield