ez-permissions 0.4.0 → 0.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.
- checksums.yaml +4 -4
- data/README.md +17 -13
- data/lib/ez/permissions/api/authorize/model_permissions.rb +1 -1
- data/lib/ez/permissions/api/models.rb +9 -0
- data/lib/ez/permissions/dsl.rb +1 -1
- data/lib/ez/permissions/resource.rb +3 -1
- data/lib/ez/permissions/version.rb +1 -1
- data/lib/tasks/ez/permissions_tasks.rake +4 -4
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b1bba0ec695b54e27b18035b6ca073f1a66810df48707479431fb3f31f0ff8c
|
4
|
+
data.tar.gz: 49278569109b575599eda90fc1afeb57490e368c8ece5442e0fc90a8eb02703b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d80747eeffaac6088373fa9fa56e78ae9351b4b9f2f708a5426344f64067bd4b4c717635482260051fb0d5004725fa535ed98074ee3e934217d9080a5d591c82
|
7
|
+
data.tar.gz: da7e1ced8d532ff27689e6b309858ad501ba3aee88edb35ec76e2af1ee72104b38b33240a6d2d47e93e8fed458434dbeac496ee9773f2601bf478595ffc2b6bd
|
data/README.md
CHANGED
@@ -7,9 +7,9 @@
|
|
7
7
|
**Ez Permissions** (read as "easy permissions") - one of the [ez-engines](https://github.com/ez-engines) collection that helps easily add permissions interface to your [Rails](http://rubyonrails.org/) application.
|
8
8
|
|
9
9
|
- Most advanced RBAC model:
|
10
|
-
- Flexible tool with simple DSL and
|
10
|
+
- Flexible tool with simple DSL and configuration
|
11
11
|
- All in one solution
|
12
|
-
-
|
12
|
+
- Convention over configuration principles.
|
13
13
|
- Depends on [ez-core](https://github.com/ez-engines/ez-core)
|
14
14
|
|
15
15
|
## Installation
|
@@ -36,7 +36,7 @@ Ez::Permissions.configure do |config|
|
|
36
36
|
config.models_roles_table_name = 'my_model_roles'
|
37
37
|
config.permissions_roles_table_name = 'my_permissions_roles'
|
38
38
|
|
39
|
-
# Suppress
|
39
|
+
# Suppress STDOUT messages for test environment
|
40
40
|
config.mute_stdout = true if Rails.env.test?
|
41
41
|
|
42
42
|
# Define your custom callbacks
|
@@ -61,7 +61,7 @@ rails generate ez:permissions:migrations
|
|
61
61
|
|
62
62
|
## DSL
|
63
63
|
|
64
|
-
Simple DSL for
|
64
|
+
Simple DSL for definition of permission relationships
|
65
65
|
```ruby
|
66
66
|
Ez::Permissions::DSL.define do |setup|
|
67
67
|
# You need add all resources of your application and possible actions
|
@@ -72,8 +72,8 @@ Ez::Permissions::DSL.define do |setup|
|
|
72
72
|
setup.add :permissions, actions: %i[crud my_custom_action]
|
73
73
|
|
74
74
|
# Actions option are not required. In such case you add all crud actions by default
|
75
|
-
setup.add :users
|
76
|
-
setup.add :projects
|
75
|
+
setup.add :users, group: :accounts # You can group resources
|
76
|
+
setup.add :projects # Resource without a group will get "others" group
|
77
77
|
end
|
78
78
|
```
|
79
79
|
|
@@ -89,7 +89,7 @@ user = User.first
|
|
89
89
|
|
90
90
|
# User model become permission model
|
91
91
|
user.roles #=> [application level roles]
|
92
|
-
user.assigned_roles #=> [user owned roles,
|
92
|
+
user.assigned_roles #=> [user owned roles, global and scoped]
|
93
93
|
user.permissions #=> [user available permissions through assigned_roles]
|
94
94
|
```
|
95
95
|
|
@@ -146,6 +146,10 @@ Permissions.includes_role?(user, :admin)
|
|
146
146
|
# Check if user includes scoped role
|
147
147
|
project = Project.first
|
148
148
|
Permissions.includes_role?(user, :manager, scoped: project)
|
149
|
+
|
150
|
+
# List users with particular role in particular scope
|
151
|
+
project = Project.first
|
152
|
+
Permissions.list_by_role(:manager, scoped: project)
|
149
153
|
```
|
150
154
|
|
151
155
|
### Permissions
|
@@ -180,7 +184,7 @@ end
|
|
180
184
|
# otherwise you will get an exception
|
181
185
|
Ez::Permissions::NotAuthorized
|
182
186
|
|
183
|
-
# Both .
|
187
|
+
# Both .authorize and .authorize! methods can be used without blocks.
|
184
188
|
|
185
189
|
# if you don't want raise exception, just use
|
186
190
|
Permissions.authorize(user, :create, :users) { puts 'Yeahh!' } #=> false
|
@@ -204,7 +208,7 @@ user_permissions.permissions_map # => { :read_users => true}
|
|
204
208
|
|
205
209
|
# and the in your code just fetch by the key:
|
206
210
|
if user_permissions.permissions_map[:read_users]
|
207
|
-
# execute
|
211
|
+
# execute authorized code
|
208
212
|
end
|
209
213
|
|
210
214
|
# or user #can? and #authorize! helper methods
|
@@ -217,7 +221,7 @@ user_permissions.authorize!(:create, :users) # => raise Ez::Permissions::NotAuth
|
|
217
221
|
EzPermissions ships with bunch of RSpec helper methods that helps mock permission.
|
218
222
|
For large test suite (more than 5000 specs) it saves up to 30% of test runs time.
|
219
223
|
|
220
|
-
Add test helpers
|
224
|
+
Add test helpers to your rspec config
|
221
225
|
```ruby
|
222
226
|
require 'ez/permissions/rspec_helpers'
|
223
227
|
|
@@ -248,7 +252,7 @@ mock_model_role(:worker, user)
|
|
248
252
|
mock_permission(:users, :create)
|
249
253
|
```
|
250
254
|
|
251
|
-
###
|
255
|
+
### Cleanup redundant permissions
|
252
256
|
If you changed your permissions DSL and removed redundant resources and actions
|
253
257
|
|
254
258
|
```sh
|
@@ -256,7 +260,7 @@ rake ez:permissions:outdated # display list of outdated permissions
|
|
256
260
|
rake ez:permissions:cleanup # remove outdated permissions from the DB
|
257
261
|
```
|
258
262
|
|
259
|
-
###
|
263
|
+
### Keep it explicit!
|
260
264
|
You can wonder, why we just not add authorization methods to user instance, like:
|
261
265
|
```ruby
|
262
266
|
user.can?(:something)
|
@@ -270,7 +274,7 @@ Of course, you can use them as mixins, but it's up to you.
|
|
270
274
|
- User can has role in scope of some resource (Project, Company, Business, etc.)
|
271
275
|
- User can has role in global scope (without scope)
|
272
276
|
- If user want access data in scope of resource - user must has assigned role scoped for this resource
|
273
|
-
- If user want access data in global scope - user must has assigned role
|
277
|
+
- If user want access data in global scope - user must has assigned role without any scoped resource (global role)
|
274
278
|
- User with global role - can't access scoped resources.
|
275
279
|
- User with scoped role - can't access global resources.
|
276
280
|
|
@@ -26,6 +26,15 @@ module Ez
|
|
26
26
|
model_role(role, model, scoped) ? true : false
|
27
27
|
end
|
28
28
|
|
29
|
+
def list_by_role(role_name, scoped: nil)
|
30
|
+
role = Ez::Permissions::API.get_role!(role_name)
|
31
|
+
|
32
|
+
Ez::Permissions::ModelRole.where(
|
33
|
+
role: role,
|
34
|
+
scoped: scoped
|
35
|
+
).map(&:model)
|
36
|
+
end
|
37
|
+
|
29
38
|
private
|
30
39
|
|
31
40
|
def model_role(role, model, scoped)
|
data/lib/ez/permissions/dsl.rb
CHANGED
@@ -42,7 +42,7 @@ module Ez
|
|
42
42
|
return unless seed_to_db(resource)
|
43
43
|
|
44
44
|
message(
|
45
|
-
"Resource [#{name}] has been successfully
|
45
|
+
"Resource [#{name}] has been successfully registered with actions: [#{resource.actions.join(', ')}]",
|
46
46
|
'SUCCESS'
|
47
47
|
)
|
48
48
|
end
|
@@ -5,12 +5,14 @@ module Ez
|
|
5
5
|
class Resource
|
6
6
|
ACTIONS = %i[create read update delete].freeze
|
7
7
|
|
8
|
-
attr_reader :name, :model, :actions
|
8
|
+
attr_reader :name, :model, :actions, :group, :label
|
9
9
|
|
10
10
|
def initialize(name, options = {})
|
11
11
|
@name = name
|
12
12
|
@model = options.fetch(:model, nil)
|
13
13
|
@actions = process_actions(options.fetch(:actions, []))
|
14
|
+
@group = options.fetch(:group, :others)
|
15
|
+
@label = options.fetch(:label, name.to_s.humanize)
|
14
16
|
end
|
15
17
|
|
16
18
|
def <=>(other)
|
@@ -7,8 +7,8 @@ namespace :ez do
|
|
7
7
|
Ez::Permissions::Permission.find_each do |permission|
|
8
8
|
next if Ez::Permissions::DSL.resource_action?(permission.resource, permission.action)
|
9
9
|
|
10
|
-
STDOUT.puts
|
11
|
-
|
10
|
+
STDOUT.puts '[WARNING] Ez::Permissions:'\
|
11
|
+
"Permission##{permission.id} [#{permission.resource} -> #{permission.action}] is redundant"
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -17,8 +17,8 @@ namespace :ez do
|
|
17
17
|
next if Ez::Permissions::DSL.resource_action?(permission.resource, permission.action)
|
18
18
|
|
19
19
|
permission.destroy
|
20
|
-
STDOUT.puts
|
21
|
-
|
20
|
+
STDOUT.puts '[WARNING] Ez::Permissions:'\
|
21
|
+
"Permission##{permission.id} [#{permission.resource} -> #{permission.action}] is removed"
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ez-permissions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Volodya Sveredyuk
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ez-core
|
@@ -193,7 +193,7 @@ licenses:
|
|
193
193
|
- MIT
|
194
194
|
metadata:
|
195
195
|
allowed_push_host: https://rubygems.org
|
196
|
-
post_install_message:
|
196
|
+
post_install_message:
|
197
197
|
rdoc_options: []
|
198
198
|
require_paths:
|
199
199
|
- lib
|
@@ -201,15 +201,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
201
201
|
requirements:
|
202
202
|
- - ">="
|
203
203
|
- !ruby/object:Gem::Version
|
204
|
-
version:
|
204
|
+
version: 2.4.0
|
205
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
206
|
requirements:
|
207
207
|
- - ">="
|
208
208
|
- !ruby/object:Gem::Version
|
209
209
|
version: '0'
|
210
210
|
requirements: []
|
211
|
-
rubygems_version: 3.
|
212
|
-
signing_key:
|
211
|
+
rubygems_version: 3.1.2
|
212
|
+
signing_key:
|
213
213
|
specification_version: 4
|
214
214
|
summary: Easy permissions engine for Rails app.
|
215
215
|
test_files: []
|