passpartu 0.5.0 → 0.5.5
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 +28 -16
- data/lib/passpartu/patcher.rb +4 -4
- data/lib/passpartu/verify.rb +6 -4
- data/lib/passpartu/version.rb +1 -1
- data/passpartu.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34188ab985989f3022e6fdcefa8ebdae5140e954e3e92ae59483cf29e523b30d
|
4
|
+
data.tar.gz: 8268980e9fe35799d4409205d902691c9a7127e33f1a8638138d82a53612a01a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97826c98b5cb98587b30fe29bedb5c7e8c20ee6e2de9c76f3d7ab198ba5fd25e5cb7b68f2b4848f8b50e6447ca4463eebf3988e3339931c91dd87ddc01a0b9a1
|
7
|
+
data.tar.gz: 5383f59ecb8aca48eb483670cb051428c529845891c26e5f45534cb550e4db761cde0f6a894945b695314c5f418ea2a33fe10333598c64cd7e5ee51d3df4ac49
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# Passpartu
|
1
|
+
# Passpartu v0.5.5 - [changelog](https://github.com/coaxsoft/passpartu/blob/master/CHANGELOG.md)
|
2
2
|
|
3
|
-
Passpartu makes policies great again (works awesome with Pundit).
|
3
|
+
Passpartu makes policies great again (works awesome with [Pundit](https://rubygems.org/gems/pundit)).
|
4
4
|
|
5
5
|
Instead of this:
|
6
6
|
```ruby
|
@@ -31,11 +31,22 @@ 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
|
34
|
+
#### Example of `passpartu.yml`
|
35
35
|
```yml
|
36
36
|
# ./config/passpartu.yml
|
37
|
+
manager: &manager
|
38
|
+
order:
|
39
|
+
create: true
|
40
|
+
edit: true
|
41
|
+
delete: false
|
42
|
+
product:
|
43
|
+
create: true
|
44
|
+
edit: true
|
45
|
+
delete: false
|
37
46
|
|
47
|
+
# yaml files supports inheritance!
|
38
48
|
admin:
|
49
|
+
<<: *manager
|
39
50
|
post:
|
40
51
|
create: false
|
41
52
|
update: true
|
@@ -51,25 +62,17 @@ admin:
|
|
51
62
|
items:
|
52
63
|
crud: true
|
53
64
|
delete: false
|
54
|
-
manager:
|
55
|
-
order:
|
56
|
-
create: true
|
57
|
-
edit: true
|
58
|
-
delete: false
|
59
|
-
product:
|
60
|
-
create: true
|
61
|
-
edit: true
|
62
|
-
delete: false
|
63
|
-
|
64
65
|
```
|
65
|
-
|
66
|
+
|
67
|
+
## Features
|
68
|
+
#### CRUD
|
66
69
|
It's possible to use `crud` key to set values for `create`, `read`, `update`, `delete` at once.
|
67
70
|
`create`, `read`, `update`, `delete` has higher priority than `crud`
|
68
71
|
In case `crud: true` and `delete: false` - result `false`
|
69
72
|
|
70
73
|
|
71
|
-
####
|
72
|
-
It's possible to exclude
|
74
|
+
#### Skip (except)
|
75
|
+
It's possible to exclude roles from checks
|
73
76
|
```ruby
|
74
77
|
user_admin.can?(:orders, :edit) # check policy for admin and returns true if policy true
|
75
78
|
user_admin.can?(:orders, :edit, except: :admin) # returns false because user is admin and we excluded admin
|
@@ -82,6 +85,15 @@ It's possible to give an array as except attribute
|
|
82
85
|
user_manager.can?(:orders, :edit, except: [:admin, :manager]) # returns false
|
83
86
|
```
|
84
87
|
|
88
|
+
`skip` alias to `except`
|
89
|
+
|
90
|
+
Note: `expect` has higher priority than `skip`. Do not use both.
|
91
|
+
```ruby
|
92
|
+
user_agent.can?(:orders, :edit, except: [:admin, :manager]) { user_agent.orders.include?(order) }
|
93
|
+
# equals to
|
94
|
+
user_agent.can?(:orders, :edit, skip: [:admin, :manager]) { user_agent.orders.include?(order) }
|
95
|
+
```
|
96
|
+
|
85
97
|
#### Per role methods
|
86
98
|
Check user roles AND policy rule
|
87
99
|
```ruby
|
data/lib/passpartu/patcher.rb
CHANGED
@@ -11,13 +11,13 @@ module Passpartu
|
|
11
11
|
|
12
12
|
def call
|
13
13
|
klass.class_eval do
|
14
|
-
define_method('can?') do |*keys, except: nil, &block|
|
15
|
-
Passpartu::BlockVerify.call(role, keys, except: except, &block)
|
14
|
+
define_method('can?') do |*keys, except: nil, skip: nil, &block|
|
15
|
+
Passpartu::BlockVerify.call(role, keys, 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, &block|
|
20
|
-
role.to_s == policy_role && Passpartu::BlockVerify.call(role, keys, except: except, &block)
|
19
|
+
define_method("#{policy_role}_can?") do |*keys, except: nil, skip: nil, &block|
|
20
|
+
role.to_s == policy_role && Passpartu::BlockVerify.call(role, keys, except: except, skip: skip, &block)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/lib/passpartu/verify.rb
CHANGED
@@ -3,15 +3,17 @@ module Passpartu
|
|
3
3
|
CRUD_KEY = 'crud'.freeze
|
4
4
|
|
5
5
|
attr_reader :role, :keys, :result, :except, :block
|
6
|
-
def initialize(role, keys, except, block)
|
6
|
+
def initialize(role, keys, except, skip, block)
|
7
|
+
exclusion = except || skip # alias
|
8
|
+
|
7
9
|
@role = role.to_s
|
8
10
|
@keys = keys.map(&:to_s)
|
9
|
-
@except = Array(
|
11
|
+
@except = Array(exclusion).map(&:to_s) if present?(exclusion)
|
10
12
|
@block = block
|
11
13
|
end
|
12
14
|
|
13
|
-
def self.call(role, keys, except: nil, &block)
|
14
|
-
new(role, keys, except, block).call
|
15
|
+
def self.call(role, keys, except: nil, skip: nil, &block)
|
16
|
+
new(role, keys, except, skip, block).call
|
15
17
|
end
|
16
18
|
|
17
19
|
def call
|
data/lib/passpartu/version.rb
CHANGED
data/passpartu.gemspec
CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |spec|
|
|
17
17
|
|
18
18
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
19
19
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
20
|
-
# if spec.respond_to?(:metadata)
|
21
20
|
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
# if spec.respond_to?(:metadata)
|
22
22
|
|
23
23
|
# spec.metadata["homepage_uri"] = spec.homepage
|
24
24
|
# spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
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.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OrestF
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -90,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
version: '0'
|
91
91
|
requirements: []
|
92
92
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.7.
|
93
|
+
rubygems_version: 2.7.7
|
94
94
|
signing_key:
|
95
95
|
specification_version: 4
|
96
96
|
summary: Passpartu makes policies great again
|