passpartu 0.5.5 → 0.6.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 +23 -4
- data/lib/passpartu/patcher.rb +8 -4
- data/lib/passpartu/verify.rb +12 -9
- data/lib/passpartu/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1074ae228e7b5f0cfff3a9a2fc0acd58536a161451cab914b814e8b1bf44470
|
4
|
+
data.tar.gz: 4ecf5e75ec63192afd3d739b47dd646912de8b594f01e8553fd6f9df0d1dbfb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ceeac19430a29384cf70bf5755ed6786e06f76d981d1c42e81a677f8163211f46bc6a4bdb4eca6d9968cc7751d0c234392edfe6227c2dfd2c0c2f1132ab36cb0
|
7
|
+
data.tar.gz: 5d4aef534482fc686033d67c043e8378dc92c8bfecbb00672d81949fa5a63ccba6c36c3fd492267375a38854085eae4f13af6da8aa20c3df7e1c1c935ee39c40
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Passpartu v0.
|
1
|
+
# Passpartu v0.6.0 - [changelog](https://github.com/coaxsoft/passpartu/blob/master/CHANGELOG.md)
|
2
2
|
|
3
3
|
Passpartu makes policies great again (works awesome with [Pundit](https://rubygems.org/gems/pundit)).
|
4
4
|
|
@@ -31,7 +31,7 @@ NOTE: Your `User` model must respond to `role` method that returns a string or a
|
|
31
31
|
Keep all your policies in one place.
|
32
32
|
Create `./config/passpartu.yml` and start writing your policies.
|
33
33
|
|
34
|
-
#### Example of `passpartu.yml`
|
34
|
+
#### Example of `passpartu.yml`
|
35
35
|
```yml
|
36
36
|
# ./config/passpartu.yml
|
37
37
|
manager: &manager
|
@@ -70,6 +70,25 @@ It's possible to use `crud` key to set values for `create`, `read`, `update`, `d
|
|
70
70
|
`create`, `read`, `update`, `delete` has higher priority than `crud`
|
71
71
|
In case `crud: true` and `delete: false` - result `false`
|
72
72
|
|
73
|
+
#### Only
|
74
|
+
It's possible to include specific roles to checks
|
75
|
+
```ruby
|
76
|
+
user_admin.can?(:orders, :edit) # check policy for admin and returns true if policy true
|
77
|
+
user_admin.can?(:orders, :edit, only: :admin) # returns true because the user is an admin and we included only admin
|
78
|
+
user_manager.can?(:orders, :edit, only: :admin) # returns false because user is manager and we included only admin
|
79
|
+
```
|
80
|
+
It's possible to give an array as only attribute
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
user_admin.can?(:orders, :edit, only: [:admin, :manager]) # returns true
|
84
|
+
user_manager.can?(:orders, :edit, only: [:admin, :manager]) # returns true
|
85
|
+
```
|
86
|
+
|
87
|
+
Note: `only` has higher priority than `except/skip`. Do not use both.
|
88
|
+
```ruby
|
89
|
+
user_admin.can?(:orders, :edit, only: :admin, except: :admin) # returns true
|
90
|
+
```
|
91
|
+
|
73
92
|
|
74
93
|
#### Skip (except)
|
75
94
|
It's possible to exclude roles from checks
|
@@ -90,7 +109,7 @@ It's possible to give an array as except attribute
|
|
90
109
|
Note: `expect` has higher priority than `skip`. Do not use both.
|
91
110
|
```ruby
|
92
111
|
user_agent.can?(:orders, :edit, except: [:admin, :manager]) { user_agent.orders.include?(order) }
|
93
|
-
# equals to
|
112
|
+
# equals to
|
94
113
|
user_agent.can?(:orders, :edit, skip: [:admin, :manager]) { user_agent.orders.include?(order) }
|
95
114
|
```
|
96
115
|
|
@@ -183,7 +202,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
183
202
|
|
184
203
|
## Contributing
|
185
204
|
|
186
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
205
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/coaxsoft/passpartu. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
187
206
|
|
188
207
|
## License
|
189
208
|
|
data/lib/passpartu/patcher.rb
CHANGED
@@ -11,13 +11,17 @@ module Passpartu
|
|
11
11
|
|
12
12
|
def call
|
13
13
|
klass.class_eval do
|
14
|
-
define_method('can?') do |*keys, except: nil, skip: nil, &block|
|
15
|
-
Passpartu::BlockVerify.call(role, keys, except: except, skip: skip, &block)
|
14
|
+
define_method('can?') do |*keys, only: nil, except: nil, skip: nil, &block|
|
15
|
+
Passpartu::BlockVerify.call(role, keys, only: only, except: except, skip: skip, &block)
|
16
16
|
end
|
17
17
|
|
18
18
|
Passpartu.policy.keys.each do |policy_role|
|
19
|
-
define_method("#{policy_role}_can?") do |*keys, except: nil, skip: nil, &block|
|
20
|
-
role.to_s == policy_role && Passpartu::BlockVerify.call(role, keys,
|
19
|
+
define_method("#{policy_role}_can?") do |*keys, only: nil, except: nil, skip: nil, &block|
|
20
|
+
role.to_s == policy_role && Passpartu::BlockVerify.call(role, keys,
|
21
|
+
only: only,
|
22
|
+
except: except,
|
23
|
+
skip: skip,
|
24
|
+
&block)
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
data/lib/passpartu/verify.rb
CHANGED
@@ -2,22 +2,24 @@ module Passpartu
|
|
2
2
|
class Verify
|
3
3
|
CRUD_KEY = 'crud'.freeze
|
4
4
|
|
5
|
-
attr_reader :role, :keys, :result, :except, :block
|
6
|
-
|
5
|
+
attr_reader :role, :keys, :result, :only, :except, :block
|
6
|
+
|
7
|
+
def initialize(role, keys, only, except, skip, block)
|
7
8
|
exclusion = except || skip # alias
|
8
9
|
|
9
10
|
@role = role.to_s
|
10
11
|
@keys = keys.map(&:to_s)
|
11
|
-
@
|
12
|
+
@only = Array(only).map(&:to_s) if present?(only)
|
13
|
+
@except = Array(exclusion).map(&:to_s) if present?(exclusion) && !@only
|
12
14
|
@block = block
|
13
15
|
end
|
14
16
|
|
15
|
-
def self.call(role, keys, except: nil, skip: nil, &block)
|
16
|
-
new(role, keys, except, skip, block).call
|
17
|
+
def self.call(role, keys, only: nil, except: nil, skip: nil, &block)
|
18
|
+
new(role, keys, only, except, skip, block).call
|
17
19
|
end
|
18
20
|
|
19
21
|
def call
|
20
|
-
return false if
|
22
|
+
return false if role_ignore?
|
21
23
|
|
22
24
|
check_policy
|
23
25
|
check_crud if policy_missed? && last_key_crud?
|
@@ -27,10 +29,11 @@ module Passpartu
|
|
27
29
|
|
28
30
|
private
|
29
31
|
|
30
|
-
def
|
31
|
-
return
|
32
|
+
def role_ignore?
|
33
|
+
return !only.include?(role) if present?(only)
|
34
|
+
return except.include?(role) if present?(except)
|
32
35
|
|
33
|
-
|
36
|
+
false
|
34
37
|
end
|
35
38
|
|
36
39
|
def check_policy
|
data/lib/passpartu/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: passpartu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OrestF
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -89,8 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
requirements: []
|
92
|
-
|
93
|
-
rubygems_version: 2.7.7
|
92
|
+
rubygems_version: 3.0.1
|
94
93
|
signing_key:
|
95
94
|
specification_version: 4
|
96
95
|
summary: Passpartu makes policies great again
|