the_role 2.5.4 → 3.0.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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +178 -526
  3. data/gem_version.rb +3 -0
  4. data/lib/the_role/version.rb +1 -3
  5. data/lib/the_role.rb +3 -41
  6. data/the_role.gemspec +5 -5
  7. metadata +20 -231
  8. data/.ruby-gemset.example +0 -1
  9. data/.ruby-version.example +0 -1
  10. data/.rvmrc.example +0 -1
  11. data/.travis.yml +0 -5
  12. data/Bye_bye_CanCan_I_got_the_Role.png +0 -0
  13. data/app/controllers/admin/role_sections_controller.rb +0 -90
  14. data/app/controllers/admin/roles_controller.rb +0 -74
  15. data/app/controllers/concerns/controller.rb +0 -23
  16. data/app/models/_templates_/role.rb +0 -3
  17. data/app/models/concerns/base.rb +0 -37
  18. data/app/models/concerns/role.rb +0 -156
  19. data/app/models/concerns/user.rb +0 -57
  20. data/config/locales/en.yml +0 -44
  21. data/config/locales/es.yml +0 -42
  22. data/config/locales/nl.yml +0 -44
  23. data/config/locales/pl.yml +0 -43
  24. data/config/locales/pt_BR.yml +0 -43
  25. data/config/locales/ru.yml +0 -43
  26. data/config/locales/zh_CN.yml +0 -42
  27. data/config/routes.rb +0 -23
  28. data/db/migrate/20111025025129_create_roles.rb +0 -23
  29. data/docs/2.1.1.png +0 -0
  30. data/lib/generators/the_role/USAGE +0 -32
  31. data/lib/generators/the_role/templates/the_role.rb +0 -11
  32. data/lib/generators/the_role/the_role_generator.rb +0 -64
  33. data/lib/tasks/roles.rake +0 -137
  34. data/lib/the_role/activerecord.rb +0 -11
  35. data/lib/the_role/config.rb +0 -30
  36. data/lib/the_role/hash.rb +0 -58
  37. data/lib/the_role/the_class_exists.rb +0 -8
  38. data/pic.png +0 -0
  39. data/spec/dummy_app/.gitignore +0 -18
  40. data/spec/dummy_app/.rspec +0 -1
  41. data/spec/dummy_app/Gemfile +0 -43
  42. data/spec/dummy_app/README.md +0 -39
  43. data/spec/dummy_app/Rakefile +0 -6
  44. data/spec/dummy_app/app/assets/images/.keep +0 -0
  45. data/spec/dummy_app/app/assets/javascripts/application.js +0 -17
  46. data/spec/dummy_app/app/assets/stylesheets/app/style.css.scss +0 -23
  47. data/spec/dummy_app/app/assets/stylesheets/application.css +0 -3
  48. data/spec/dummy_app/app/controllers/application_controller.rb +0 -38
  49. data/spec/dummy_app/app/controllers/concerns/.keep +0 -0
  50. data/spec/dummy_app/app/controllers/pages_controller.rb +0 -75
  51. data/spec/dummy_app/app/controllers/users_controller.rb +0 -32
  52. data/spec/dummy_app/app/controllers/welcome_controller.rb +0 -13
  53. data/spec/dummy_app/app/helpers/application_helper.rb +0 -2
  54. data/spec/dummy_app/app/mailers/.keep +0 -0
  55. data/spec/dummy_app/app/models/.keep +0 -0
  56. data/spec/dummy_app/app/models/concerns/.keep +0 -0
  57. data/spec/dummy_app/app/models/page.rb +0 -24
  58. data/spec/dummy_app/app/models/role.rb +0 -4
  59. data/spec/dummy_app/app/models/user.rb +0 -21
  60. data/spec/dummy_app/app/views/layouts/_current_user_info.html.haml +0 -17
  61. data/spec/dummy_app/app/views/layouts/application.html.haml +0 -68
  62. data/spec/dummy_app/app/views/pages/_form.html.haml +0 -19
  63. data/spec/dummy_app/app/views/pages/edit.html.haml +0 -7
  64. data/spec/dummy_app/app/views/pages/index.html.haml +0 -27
  65. data/spec/dummy_app/app/views/pages/manage.html.haml +0 -23
  66. data/spec/dummy_app/app/views/pages/my.html.haml +0 -10
  67. data/spec/dummy_app/app/views/pages/new.html.haml +0 -5
  68. data/spec/dummy_app/app/views/pages/show.html.haml +0 -15
  69. data/spec/dummy_app/app/views/users/edit.html.haml +0 -34
  70. data/spec/dummy_app/app/views/welcome/index.html.haml +0 -38
  71. data/spec/dummy_app/app/views/welcome/profile.html.haml +0 -2
  72. data/spec/dummy_app/bin/bundle +0 -3
  73. data/spec/dummy_app/bin/rails +0 -4
  74. data/spec/dummy_app/bin/rake +0 -4
  75. data/spec/dummy_app/config/application.rb +0 -25
  76. data/spec/dummy_app/config/boot.rb +0 -4
  77. data/spec/dummy_app/config/database.yml +0 -17
  78. data/spec/dummy_app/config/environment.rb +0 -5
  79. data/spec/dummy_app/config/environments/development.rb +0 -29
  80. data/spec/dummy_app/config/environments/production.rb +0 -80
  81. data/spec/dummy_app/config/environments/test.rb +0 -36
  82. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +0 -7
  83. data/spec/dummy_app/config/initializers/devise.rb +0 -227
  84. data/spec/dummy_app/config/initializers/filter_parameter_logging.rb +0 -4
  85. data/spec/dummy_app/config/initializers/inflections.rb +0 -16
  86. data/spec/dummy_app/config/initializers/mime_types.rb +0 -5
  87. data/spec/dummy_app/config/initializers/secret_token.rb +0 -12
  88. data/spec/dummy_app/config/initializers/session_store.rb +0 -3
  89. data/spec/dummy_app/config/initializers/the_role.rb +0 -6
  90. data/spec/dummy_app/config/initializers/wrap_parameters.rb +0 -14
  91. data/spec/dummy_app/config/locales/devise.en.yml +0 -57
  92. data/spec/dummy_app/config/locales/en.yml +0 -7
  93. data/spec/dummy_app/config/locales/ru.yml +0 -4
  94. data/spec/dummy_app/config/routes.rb +0 -26
  95. data/spec/dummy_app/config.ru +0 -4
  96. data/spec/dummy_app/db/migrate/20120212061952_devise_create_users.rb +0 -63
  97. data/spec/dummy_app/db/migrate/20120212063249_create_roles.rb +0 -18
  98. data/spec/dummy_app/db/migrate/20120314061307_create_pages.rb +0 -14
  99. data/spec/dummy_app/db/schema.rb +0 -59
  100. data/spec/dummy_app/db/seeds.rb +0 -85
  101. data/spec/dummy_app/lib/assets/.keep +0 -0
  102. data/spec/dummy_app/lib/tasks/.keep +0 -0
  103. data/spec/dummy_app/lib/tasks/assets.rake +0 -15
  104. data/spec/dummy_app/lib/tasks/db_bootstrap.rake +0 -16
  105. data/spec/dummy_app/log/.keep +0 -0
  106. data/spec/dummy_app/public/404.html +0 -58
  107. data/spec/dummy_app/public/422.html +0 -58
  108. data/spec/dummy_app/public/500.html +0 -57
  109. data/spec/dummy_app/public/favicon.ico +0 -0
  110. data/spec/dummy_app/public/robots.txt +0 -5
  111. data/spec/dummy_app/spec/controllers/admin_roles_controller_spec.rb +0 -52
  112. data/spec/dummy_app/spec/controllers/pages_controller_spec.rb +0 -141
  113. data/spec/dummy_app/spec/controllers/welcome_controller_spec.rb +0 -66
  114. data/spec/dummy_app/spec/factories/page.rb +0 -6
  115. data/spec/dummy_app/spec/factories/role.rb +0 -55
  116. data/spec/dummy_app/spec/factories/user.rb +0 -11
  117. data/spec/dummy_app/spec/models/hash_spec.rb +0 -272
  118. data/spec/dummy_app/spec/models/param_process_spec.rb +0 -39
  119. data/spec/dummy_app/spec/models/role_spec.rb +0 -218
  120. data/spec/dummy_app/spec/models/user_spec.rb +0 -164
  121. data/spec/dummy_app/spec/routing/admin_roles_routing_spec.rb +0 -41
  122. data/spec/dummy_app/spec/routing/pages_routing_spec.rb +0 -35
  123. data/spec/dummy_app/spec/spec_helper.rb +0 -68
  124. data/spec/dummy_app/vendor/assets/javascripts/.keep +0 -0
  125. data/spec/dummy_app/vendor/assets/stylesheets/.keep +0 -0
  126. data/the_role.yml.teamocil.example +0 -11
data/README.md CHANGED
@@ -1,541 +1,193 @@
1
- ## TheRole - Authorization Gem for Ruby on Rails with administrative interface.
2
-
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
-
5
- ### Semantic, Flexible, Lightweight
1
+ <h2 align="center" class='center' style="text-align:center">
2
+ TheRole 3.0
3
+ </h2>
4
+
5
+ <p align="center" class='center' style="text-align:center">
6
+ <b>Authorization gem for Ruby on Rails</b><br>
7
+ <i>with <a href="https://github.com/TheRole/TheRoleManagementPanelBootstrap3">Management Panel</a></i>
8
+ </p>
9
+
10
+ <p align="center" class='center' style="text-align:center">
11
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/the_role.png" alt="TheRole. Authorization gem for Ruby on Rails with Administrative interface">
12
+ </p>
13
+
14
+ <p align="center" class='center' style="text-align:center">
15
+ <b>Semantic. Flexible. Lightweigh</b>
16
+ </p>
17
+
18
+ <div align="center" class='center' style="text-align:center">
19
+
20
+ <a href="http://badge.fury.io/rb/the_role"><img src="https://badge.fury.io/rb/the_role.svg" alt="Gem Version" height="18"></a>
21
+ &nbsp;
22
+ <a href="https://travis-ci.org/TheRole/DummyApp"><img src="https://travis-ci.org/TheRole/DummyApp.svg?branch=master" alt="Build Status" height="18"></a>
23
+ &nbsp;
24
+ <a href="https://codeclimate.com/github/TheRole/TheRoleApi"><img src="https://codeclimate.com/github/TheRole/TheRoleApi/badges/gpa.svg" /></a>
25
+ &nbsp;
26
+ <a href="https://www.ruby-toolbox.com/categories/rails_authorization">ruby-toolbox</a>
27
+
28
+ <p>
29
+ Strongly recommended <a href='https://github.com/TheRole/docs/blob/master/MigrationsFromV2.md'>to upgrade from TheRole2 to TheRole3</a>. Please, do it ASAP.
30
+ </p>
31
+ </div>
6
32
 
7
33
  ### INTRO
8
34
 
9
- <table>
10
- <tr>
11
- <th align="left">Bye bye CanCan, I got The Role!</th>
12
- <th align="left">Description</th>
13
- </tr>
14
- <tr>
15
- <td><img src="https://github.com/the-teacher/the_role/raw/master/Bye_bye_CanCan_I_got_the_Role.png" alt="Bye bye CanCan, I got The Role!"></td>
16
- <td>TheRole is an authorization library for Ruby on Rails which restricts what resources a given user is allowed to access. All permissions are defined in with 2-level-hash, and stored in the database as a JSON string.<br><br>TheRole - Semantic, lightweight role system with an administrative interface.<br><br>Role is a two-level hash, consisting of the <b>sections</b> and nested <b>rules</b>.<br><br>A <b>Section</b> may be associated with a <b>controller</b> name.<br><br>A <b>Rule</b> may be associated with an <b>action</b> name.<br><br>A Section can have many rules.<br><br>A Rule can be <b>true</b> or <b>false</b>.<br><br><b>Sections</b> and nested <b>Rules</b> provide an <b>ACL</b> (<b>Access Control List</b>)<br><br><br>Using hashes, makes role system extremely easy to configure and use.<br></td>
17
- </tr>
18
- </table>
35
+ TheRole is an authorization library for Ruby on Rails which restricts what resources a given user is allowed to access. All permissions are defined in with **2-level-hash**, and **stored in the database as a JSON string**.
19
36
 
20
- ### GUI
37
+ <p align="center" class='center' style="text-align:center">
38
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/hash2string.png" alt="TheRole. Authorization gem for Ruby on Rails with Administrative interface">
39
+ </p>
21
40
 
22
- :warning: UI moved in **the_role_bootstrap3_ui** gem
41
+ Using hashes, makes role system extremely easy to configure and use
23
42
 
24
- https://github.com/the-teacher/the_role_bootstrap3_ui
43
+ * Any Role is a two-level hash, consisting of the <b>sections</b> and nested <b>rules</b>
44
+ * A <b>Section</b> may be associated with a <b>controller</b> name
45
+ * A <b>Rule</b> may be associated with an <b>action</b> name
46
+ * A Section can have many rules
47
+ * A Rule can be <b>true</b> or <b>false</b>
48
+ * <b>Sections</b> and nested <b>Rules</b> provide an <b>ACL</b> (<b>Access Control List</b>)
25
49
 
26
- We are waiting for **foundation** version of UI
50
+ #### Management Panel
27
51
 
28
52
  <table>
29
53
  <tr>
30
- <td>TheRole management web interface => localhost:3000/admin/roles</td>
54
+ <td>
55
+ <b>http://localhost:3000/admin/roles</b>
56
+ </td>
31
57
  </tr>
32
58
  <tr>
33
- <td><img src="https://github.com/the-teacher/the_role/raw/master/pic.png" alt="TheRole"></td>
59
+ <td>
60
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/gui.png?2" alt="TheRole GUI">
61
+ </td>
34
62
  </tr>
35
63
  </table>
36
64
 
37
- puts following yields into your layout:
38
-
39
- ```ruby
40
- = yield :role_sidebar
41
- = yield :role_main
42
- ```
43
-
44
- ### Rails 4 version
45
-
46
- ```
47
- gem 'the_role', '~> 2.5.2'
48
-
49
- gem 'the_role_bootstrap3_ui'
50
- ```
51
-
52
- Please read *the_role_bootstrap3_ui* docs to know more about assets
53
-
54
- https://github.com/the-teacher/the_role_bootstrap3_ui
55
-
56
-
57
- ## If you have any questions
58
-
59
- Please, before asking anything try to launch and play with the **[Dummy App](spec/dummy_app)** in the spec folder. Maybe an example integration will be better than any documentation. Thank you!
60
-
61
- ### Instalation
62
-
63
- * [INSTALL](#install)
64
- * [INTEGRATION](#integration)
65
- * [Configuration (optional)](#configuration)
66
-
67
- ### Understanding
68
-
69
- * [TheRole instead of CanCan?](#therole-instead-of-cancan)
70
- * [What does it mean semantic?](#what-does-it-mean-semantic)
71
- * [Virtual sections and rules](#virtual-sections-and-rules)
72
- * [Using with Views](#using-with-views)
73
- * [Who is Administrator?](#who-is-administrator)
74
- * [Who is Moderator?](#who-is-moderator)
75
- * [Who is Owner?](#who-is-owner)
76
-
77
- ### API
78
-
79
- * [User](#user)
80
- * [Role](#role)
81
-
82
- ## Install
83
-
84
- ```ruby
85
- # You can use any Bootstrap 3 version (CSS, LESS, SCSS)
86
- gem 'bootstrap-sass', github: 'thomas-mcdonald/bootstrap-sass'
87
-
88
- gem "the_role", "~> 2.0.0"
89
- ```
90
-
91
- ```ruby
92
- bundle
93
- ```
94
-
95
- install note
96
-
97
- ```
98
- bundle exec rails g the_role --help
99
- ```
100
-
101
- ### Change User migration
102
-
103
- Add a **role_id:integer** field to your User Model
104
-
105
- ```ruby
106
- def self.up
107
- create_table :users do |t|
108
- t.string :login
109
- t.string :email
110
- t.string :crypted_password
111
- t.string :salt
112
-
113
- # TheRole field
114
- t.integer :role_id
115
-
116
- t.timestamps
117
- end
118
- end
119
- ```
120
-
121
- ### Change User model
122
-
123
- ```ruby
124
- class User < ActiveRecord::Base
125
- include TheRole::User
126
- # or following alias for AR:
127
- # has_role
128
-
129
- # has_many :pages
130
- end
131
- ```
132
-
133
- ### Create Role model
134
-
135
- Generate Role model
136
-
137
- ```ruby
138
- bundle exec rails g the_role install
139
- ```
140
-
141
- or you can create Role model manually:
142
-
143
- ```ruby
144
- class Role < ActiveRecord::Base
145
- include TheRole::Role
146
- # or following alias for AR:
147
- # acts_as_role
148
- end
149
- ```
150
-
151
- install TheRole migrations
152
-
153
- ```ruby
154
- rake the_role_engine:install:migrations
155
- ```
156
-
157
- Invoke migrations
158
-
159
- ```ruby
160
- rake db:migrate
161
- ```
162
-
163
- ### Create Admin
164
-
165
- Create admin role
166
-
167
- ```
168
- bundle exec rails g the_role admin
169
- ```
170
-
171
- Makes any user as Admin
172
-
173
- ```
174
- User.first.update( role: Role.with_name(:admin) )
175
- ```
176
-
177
- ## Integration
178
-
179
- #### Change your ApplicationController
180
-
181
- **include TheRoleController** in your Application controller
182
-
183
- ```ruby
184
- class ApplicationController < ActionController::Base
185
- include TheRole::Controller
186
-
187
- protect_from_forgery
188
-
189
- def access_denied
190
- flash[:error] = t('the_role.access_denied')
191
- redirect_to(:back)
192
- end
193
- end
194
- ```
195
-
196
- #### Mount routes
197
-
198
- config/routes.rb
199
-
200
- ```ruby
201
- concern :the_role, TheRole::AdminRoutes.new
202
-
203
- namespace :admin do
204
- concerns :the_role
205
- end
206
- ```
207
-
208
- ### Configuration
209
-
210
- create the_role config:
211
-
212
- ```
213
- bundle exec rails g the_role config
214
- ```
215
-
216
- **config/initializers/the_role.rb**
217
-
218
- ```ruby
219
- TheRole.configure do |config|
220
- config.layout = :application
221
- config.default_user_role = :user
222
- config.access_denied_method = :access_denied # define it in ApplicationController
223
- config.login_required_method = :authenticate_user! # devise auth method
224
-
225
- # config.first_user_should_be_admin = false
226
- # config.destroy_strategy = :restrict_with_exception # can be nil
227
- end
228
- ```
229
-
230
- #### Usage with any controller
231
-
232
- ```ruby
233
- class PagesController < ApplicationController
234
- before_action :login_required, except: [:index, :show]
235
- before_action :role_required, except: [:index, :show]
236
-
237
- before_action :set_page, only: [:edit, :update, :destroy]
238
- before_action :owner_required, only: [:edit, :update, :destroy]
239
-
240
- def edit
241
- # ONLY OWNER CAN EDIT THIS PAGE
242
- end
243
-
244
- private
245
-
246
- def set_page
247
- @page = Page.find params[:id]
248
-
249
- # TheRole: You should define OWNER CHECK OBJECT
250
- # When editable object was found
251
- # You should define @owner_check_object before invoking **owner_required** method
252
- @owner_check_object = @page
253
- end
254
- end
255
- ```
256
-
257
- **integration with Inhirited Resource**
258
-
259
- ```ruby
260
- def owner_required
261
- @owner_check_object = resource
262
- super
263
- end
264
- ```
265
-
266
- ## Understanding
267
-
268
- #### TheRole instead of CanCan?
269
-
270
- TheRole, in contrast to CanCan, has a simple and predefined way to find the access state of the current role. If you don't want to create your own role scheme with CanCan Abilities - TheRole can be a great solution for you.
271
-
272
- You can manage roles with a simple UI. TheRole's ACL structure is inspired by Rails' controllers, that's why it's so great for Rails applications.
273
-
274
- #### What does semantic mean?
275
-
276
- Semantic - the science of meaning. Humans should be able to quickly understand what is happening in a role system.
277
-
278
- Look at the next Role hash. If you can understand access rules - this authorization system is semantic.
279
-
280
- ```ruby
281
- role = {
282
- 'pages' => {
283
- 'index' => true,
284
- 'show' => true,
285
- 'new' => false,
286
- 'edit' => false,
287
- 'update' => false,
288
- 'destroy' => false
289
- },
290
- 'articles' => {
291
- 'index' => true,
292
- 'show' => true
293
- },
294
- 'twitter' => {
295
- 'button' => true,
296
- 'follow' => false
297
- }
298
- }
299
- ```
300
-
301
- #### Virtual sections and rules
302
-
303
- Usually, we use real names of controllers and actions for names of sections and rules:
304
-
305
- ```ruby
306
- @user.has_role?(:pages, :show)
307
- ```
308
-
309
- But, also, you can use virtual names of sections, and virtual names of section's rules.
310
-
311
- ```ruby
312
- @user.has_role?(:twitter, :button)
313
- @user.has_role?(:facebook, :like)
314
- ```
315
-
316
- And you can use them as well as other access rules.
317
-
318
- #### Usage within Views
319
-
320
- ```ruby
321
- <% if @user.has_role?(:twitter, :button) %>
322
- Twitter Button is Here
323
- <% else %>
324
- Nothing here :(
325
- <% end %>
326
- ```
327
-
328
- #### Who is Administrator?
329
-
330
- Administrator is the user who can access any section and rules of your application.
331
-
332
- Administrator is the owner of any objects in your application.
333
-
334
- Administrator is the user, who has a virtual section **system** and a rule **administrator** in the role-hash.
335
-
336
-
337
- ```ruby
338
- admin_role_fragment = {
339
- :system => {
340
- :administrator => true
341
- }
342
- }
343
- ```
344
-
345
- #### Who is Moderator?
346
-
347
- Moderator is the user, who has access to any actions of some section(s).
348
-
349
- Moderator is the owner of any objects of some class.
350
-
351
- Moderator is the user, who has a virtual section **moderator**, with **section name** as rule name.
352
-
353
- An example of a Moderator of Pages (controller) and Twitter (virtual section)
354
-
355
- ```ruby
356
- moderator_role_fragment = {
357
- :moderator => {
358
- :pages => true,
359
- :blogs => false,
360
- :twitter => true
361
- }
362
- }
363
- ```
364
-
365
- #### Who is Owner?
366
-
367
- Administrator is owner of any object in system.
368
-
369
- Moderator of pages is owner of any page.
370
-
371
- User is owner of objects, when **Object#user_id == User#id**.
372
-
373
-
374
- # API
375
-
376
- ## User
377
-
378
- ```ruby
379
- # User's role
380
- @user.role # => Role obj
381
- ```
382
-
383
- Is a user Administrator?
384
-
385
- ```ruby
386
- @user.admin? => true | false
387
- ```
388
-
389
- Is a user Moderator?
390
-
391
- ```ruby
392
- @user.moderator?(:pages) => true | false
393
- @user.moderator?(:blogs) => true | false
394
- @user.moderator?(:articles) => true | false
395
- ```
396
-
397
- Has user got access to **rule** of **section** (action of controller)?
398
-
399
- ```ruby
400
- @user.has_role?(:pages, :show) => true | false
401
- @user.has_role?(:blogs, :new) => true | false
402
- @user.has_role?(:articles, :edit) => true | false
403
-
404
- # return true if one of roles is true
405
- @user.any_role?(pages: :show, posts: :show) => true | false
406
- ```
407
-
408
- Is user **Owner** of object?
409
-
410
- ```ruby
411
- @user.owner?(@page) => true | false
412
- @user.owner?(@blog) => true | false
413
- @user.owner?(@article) => true | false
414
- ```
415
-
416
- ## Role
417
-
418
- ```ruby
419
- # Find a Role by name
420
- @role = Role.with_name(:user)
421
- ```
422
-
423
- ```ruby
424
- @role.has?(:pages, :show) => true | false
425
- @role.moderator?(:pages) => true | false
426
- @role.admin? => true | false
427
-
428
- # return true if one of roles is true
429
- @role.any?(pages: :show, posts: :show) => true | false
430
- ```
431
-
432
- #### CREATE
433
-
434
- ```ruby
435
- # Create a section of rules
436
- @role.create_section(:pages)
437
- ```
438
-
439
- ```ruby
440
- # Create rule in section (false value by default)
441
- @role.create_rule(:pages, :index)
442
- ```
443
-
444
- #### READ
445
-
446
- ```ruby
447
- @role.to_hash => Hash
448
-
449
- # JSON string
450
- @role.to_json => String
451
-
452
- # check method
453
- @role.has_section?(:pages) => true | false
454
- ```
455
-
456
- #### UPDATE
457
-
458
- ```ruby
459
- # set this rule on
460
- @role.rule_on(:pages, :index)
461
- ```
462
-
463
- ```ruby
464
- # set this rule off
465
- @role.rule_off(:pages, :index)
466
- ```
467
-
468
- ```ruby
469
- # Incoming hash is true-mask-hash
470
- # All the rules of the Role will be reset to false
471
- # Only rules from true-mask-hash will be set true
472
- new_role_hash = {
473
- :pages => {
474
- :index => true,
475
- :show => true
476
- }
477
- }
478
-
479
- @role.update_role(new_role_hash)
480
- ```
481
-
482
- #### DELETE
483
-
484
- ```ruby
485
- # delete a section
486
- @role.delete_section(:pages)
487
-
488
- # delete a rule in section
489
- @role.delete_rule(:pages, :show)
490
- ```
491
-
492
- #### Changelog
493
-
494
- * 2.3.0 - Refactoring
495
- * 2.1.0 - User#any_role? & Role#any?
496
- * 2.0.3 - create role fix, cleanup
497
- * 2.0.2 - code cleanup, readme
498
- * 2.0.1 - code cleanup
499
- * 2.0.0 - Rails 4 ready, configurable, tests
500
- * 1.7.0 - mass assignment for User#role_id, doc, locales, changes in test app
501
- * 1.6.9 - assets precompile addon
502
- * 1.6.8 - doc, re dependencies
503
- * 1.6.7 - Es locale (beta 0.2)
504
- * 1.6.6 - Ru locale, localization (beta 0.1)
505
- * 1.6.5 - has_section?, fixes, tests (alpha 0.3)
506
- * 1.6.4 - En locale (alpha 0.2)
507
- * 1.6.3 - notifications
508
- * 1.6.0 - stabile release (alpha 0.1)
509
-
510
- ### i18n
511
-
512
- **Ru, En** (by me)
513
-
514
- **Es** by @igmarin
515
-
516
- **zh_CN** by @doabit & @linjunpop
517
-
518
- **PL** by @egb3
519
-
520
- ### MIT-LICENSE
521
-
522
- ##### Copyright (c) 2012-2014 [Ilya N.Zykin]
523
-
524
- Permission is hereby granted, free of charge, to any person obtaining
525
- a copy of this software and associated documentation files (the
526
- "Software"), to deal in the Software without restriction, including
527
- without limitation the rights to use, copy, modify, merge, publish,
528
- distribute, sublicense, and/or sell copies of the Software, and to
529
- permit persons to whom the Software is furnished to do so, subject to
530
- the following conditions:
531
-
532
- The above copyright notice and this permission notice shall be
533
- included in all copies or substantial portions of the Software.
534
-
535
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
536
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
537
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
538
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
539
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
540
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
541
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
65
+ **Import/Export operations provided via TheRole Management Panel.** If you have 2 Rails apps, based on TheRole - you can move roles between them via export/import abilities of TheRole Management Panel.
66
+ It can be usefull for Rails apps based on one engine.
67
+
68
+ <div align="center" class='center' style="text-align:center">
69
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/import_export.png" alt="TheRole. Authorization gem for Ruby on Rails with Administrative interface">
70
+ </div>
71
+
72
+ #### Limitations by Design
73
+
74
+ TheRole uses few conventions over configuration.
75
+ It gives simplicity of code, but also some limitations.
76
+ You have to know about them before using of TheRole:
77
+ <a href="https://github.com/TheRole/docs/blob/master/Limitations.md">Limitations list</a>
78
+
79
+ <hr>
80
+
81
+ <div align="center" class='center' style="text-align:center">
82
+ <a href="https://github.com/TheRole/docs/blob/master/TheRoleInstallation.md">
83
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/install.png?2" alt="TheRole. Installation">
84
+ </a>
85
+ </div>
86
+
87
+ <div align="center" class='center' style="text-align:center">
88
+ <a href="https://github.com/TheRole/docs/blob/master/TheRoleAPI.md">
89
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/api.png" alt="TheRole API">
90
+ </a>
91
+ </div>
92
+
93
+ <div align="center" class='center' style="text-align:center">
94
+ <a href="https://github.com/TheRole/docs/blob/master/IntegrationWithRailsControllers.md">
95
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/int_ctrl.png" alt="Integration with Rails controllers">
96
+ </a>
97
+ </div>
98
+
99
+ <div align="center" class='center' style="text-align:center">
100
+ <a href="https://github.com/TheRole/docs/blob/master/IntegrationWithRailsViews.md">
101
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/int_views.png" alt="Integration with Rails views">
102
+ </a>
103
+ </div>
104
+
105
+ <div align="center" class='center' style="text-align:center">
106
+ <a href="https://github.com/TheRole/docs/blob/master/UsingWithStrongParameters.md">
107
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/int_params.png" alt="Using with Strong Parameters">
108
+ </a>
109
+ </div>
110
+
111
+ <div align="center" class='center' style="text-align:center">
112
+ <a href="https://github.com/TheRole/docs/blob/master/TheRoleGuiInstallation.md">
113
+ <img src="https://raw.githubusercontent.com/TheRole/docs/master/images/install_gui.png" alt="TheRole GUI. Installation">
114
+ </a>
115
+ </div>
116
+
117
+ <hr>
118
+
119
+ <div align="center" class='center' style="text-align:center">
120
+ <table>
121
+ <tbody>
122
+ <tr>
123
+ <td colspan="2">
124
+ <b>FAQ</b>
125
+ </td>
126
+ </tr>
127
+
128
+ <tr>
129
+ <td width="350px" valign="top" style='vertical-align:top'>
130
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/FAQ.md#why-therole-was-created'>Why TheRole was created?</a></p>
131
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/FAQ.md#who-is-administrator'>Who is Administrator?</a></p>
132
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/FAQ.md#who-is-moderator'>Who is Moderator?</a></p>
133
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/FAQ.md#who-is-owner'>Who is Owner?</a></p>
134
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/Ownership.md'>Few words about Ownership</a></p>
135
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/Customization.md'>Customization, Rake tasks, code generators</a></p>
136
+ </td>
137
+
138
+ <td width="350px" valign="top" style='vertical-align:top'>
139
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/FAQ.md##what-does-it-mean-semantic'>What does it mean semantic?</a></p>
140
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/FAQ.md#virtual-sections-and-rules'>Virtual sections and rules</a></p>
141
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/Limitations.md'>Limitations</a></p>
142
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/Contributing.md'>Contributing</a></p>
143
+ <p align="left" class="left" style="text-align:left"><a href='https://github.com/TheRole/docs/blob/master/MigrationsFromV2.md'>Migration form TheRole 2 to TheRole 3</a></p>
144
+ </td>
145
+ </tr>
146
+ </tbody>
147
+ </table>
148
+ </div>
149
+
150
+ <hr>
151
+
152
+ ### We need your feedback!
153
+
154
+ If you have to say something about TheRole, or if you need help, there are few ways to contact us:
155
+
156
+ 0. SKYPE: **ilya.killich**
157
+ 0. Email: zykin-ilya@ya.ru
158
+ 0. TWITTER: [@iam_teacher](https://twitter.com/iam_teacher)
159
+ 0. Hash tag: [#the_role](https://twitter.com/hashtag/the_role)
160
+ 0. Google group: [about the_role](https://groups.google.com/forum/#!forum/the_role)
161
+
162
+ <hr>
163
+
164
+ #### Test matrix
165
+
166
+ * **RAILS:** 3.2.21, 4.0, 4.1, 4.2
167
+ * **RUBY:** 1.9.3, 2.0, 2.1, 2.2
168
+ * **DB**: sqlite, mysql, postgresql
169
+
170
+ totally: 48 environments
171
+
172
+ <hr>
173
+
174
+ **Supported locales:**
175
+ [the_role_api](https://github.com/TheRole/the_role_api/tree/master/config/locales) |
176
+ [the_role_management_panel](https://github.com/TheRole/the_role_management_panel/tree/master/config/locales)
177
+ (please, help us with them)
178
+ <hr>
179
+
180
+ ### MIT License
181
+
182
+ [MIT License](https://github.com/TheRole/docs/blob/master/LICENSE.md)
183
+ Copyright (c) 2012-2015 [Ilya N.Zykin](https://github.com/the-teacher)
184
+
185
+ #### Maintainers
186
+
187
+ [@the-teacher](https://github.com/the-teacher),
188
+ [@sedx](https://github.com/sedx),
189
+ [@seuros](https://github.com/seuros)
190
+
191
+ #### Contributors
192
+
193
+ @igmarin, @doabit, @linjunpop, @egb3