hubbado-policy 1.2.0 → 1.3.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/CHANGELOG.md +13 -1
- data/README.md +21 -0
- data/hubbado-policy.gemspec +3 -3
- data/lib/hubbado/policy/base.rb +12 -5
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85715105fb8d91ba36116e0fe32fc87806a48960898d9e5b9802af20bba64e67
|
4
|
+
data.tar.gz: 532065ab325a09f66d6f2dc18e89db1b77f2c2032f45ee424f6dc196dde99c8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff8d518316ca3e959685b16f9b76afc893686ff02d237de6ccc9573e14b2ac2114bc20bb0a69af9bb5af3bb8105732123b3d486ae1da3ba24e6fbb0054adac1a
|
7
|
+
data.tar.gz: 793021cd69698ace3607c10d68cab0811032f2c93e1d2b71c497e5405ebd2f4b6141eabb023b2b2bb34b4eae7155fff0caa1f62912a35dad3267445aab2d515e
|
data/CHANGELOG.md
CHANGED
@@ -2,9 +2,21 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
|
+
## [1.3.0] - 2025-06-03
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
- Ability to configure the i18n_scope for a non-generic denied reason
|
13
|
+
|
14
|
+
## [1.2.1] - 2025-06-02
|
15
|
+
|
16
|
+
### Fixed
|
17
|
+
|
18
|
+
- Policies class instance variable is correctly copied from parent policy
|
19
|
+
|
8
20
|
## [1.2.0] - 2025-05-27
|
9
21
|
|
10
22
|
### Added
|
data/README.md
CHANGED
@@ -131,6 +131,27 @@ en:
|
|
131
131
|
denied: "Access denied"
|
132
132
|
```
|
133
133
|
|
134
|
+
You can also specify a custom i18n scope when returning denied results:
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
define_policy :edit do
|
138
|
+
# Use a different i18n scope for this specific denial
|
139
|
+
return denied(:not_authorized, i18n_scope: "custom_errors.article")
|
140
|
+
|
141
|
+
permitted
|
142
|
+
end
|
143
|
+
```
|
144
|
+
|
145
|
+
Both the class method and instance method versions of `denied` support the `i18n_scope` parameter:
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
# Class method
|
149
|
+
ArticlePolicy.denied(:custom_reason, i18n_scope: "errors.custom")
|
150
|
+
|
151
|
+
# Instance method
|
152
|
+
policy.denied(:custom_reason, i18n_scope: "errors.custom")
|
153
|
+
```
|
154
|
+
|
134
155
|
### Testing
|
135
156
|
|
136
157
|
Policies can be mimiced using a built-in control
|
data/hubbado-policy.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "hubbado-policy"
|
3
|
-
s.version = "1.
|
3
|
+
s.version = "1.3.0"
|
4
4
|
s.summary = "A lightweight, flexible policy framework for Ruby applications"
|
5
5
|
|
6
6
|
s.authors = ["Hubbado Devs"]
|
7
7
|
s.email = ["devs@hubbado.com"]
|
8
|
-
s.homepage =
|
8
|
+
s.homepage = "https://github.com/hubbado/hubbado-policy"
|
9
9
|
s.license = "MIT"
|
10
10
|
|
11
11
|
s.metadata["homepage_uri"] = s.homepage
|
@@ -24,10 +24,10 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.platform = Gem::Platform::RUBY
|
25
25
|
s.required_ruby_version = ">= 3.2"
|
26
26
|
|
27
|
-
s.add_runtime_dependency "i18n"
|
28
27
|
s.add_runtime_dependency "evt-casing"
|
29
28
|
s.add_runtime_dependency "evt-record_invocation"
|
30
29
|
s.add_runtime_dependency "evt-template_method"
|
30
|
+
s.add_runtime_dependency "i18n"
|
31
31
|
|
32
32
|
s.add_development_dependency "debug"
|
33
33
|
s.add_development_dependency "hubbado-style"
|
data/lib/hubbado/policy/base.rb
CHANGED
@@ -7,8 +7,14 @@ module Hubbado
|
|
7
7
|
end
|
8
8
|
|
9
9
|
module ClassMethods
|
10
|
+
def inherited(subclass)
|
11
|
+
super
|
12
|
+
# Copy policies from parent class to subclass
|
13
|
+
subclass.instance_variable_set(:@policies, @policies&.dup || Set.new)
|
14
|
+
end
|
15
|
+
|
10
16
|
def define_policy(policy, *args, **kwargs, &block)
|
11
|
-
@policies ||=
|
17
|
+
@policies ||= Set.new
|
12
18
|
@policies << policy
|
13
19
|
|
14
20
|
# NOTE: This uses the technique described here so that the block given to
|
@@ -42,13 +48,14 @@ module Hubbado
|
|
42
48
|
# Define this in a subclass if there are dependencies to be configure
|
43
49
|
template_method :configure
|
44
50
|
|
45
|
-
def self.denied(reason = nil, data: nil)
|
51
|
+
def self.denied(reason = nil, data: nil, i18n_scope: nil)
|
52
|
+
i18n_scope ||= self.i18n_scope
|
46
53
|
reason ||= :denied
|
47
54
|
Result.new(false, reason, i18n_scope: i18n_scope, data: data)
|
48
55
|
end
|
49
56
|
|
50
57
|
def self.permitted
|
51
|
-
Result.new(true, :permitted
|
58
|
+
Result.new(true, :permitted)
|
52
59
|
end
|
53
60
|
|
54
61
|
def self.i18n_scope
|
@@ -66,8 +73,8 @@ module Hubbado
|
|
66
73
|
self.class == other.class && user == other.user && record == other.record
|
67
74
|
end
|
68
75
|
|
69
|
-
def denied(reason = nil, data: nil)
|
70
|
-
self.class.denied(reason, data: data)
|
76
|
+
def denied(reason = nil, data: nil, i18n_scope: nil)
|
77
|
+
self.class.denied(reason, data: data, i18n_scope: i18n_scope)
|
71
78
|
end
|
72
79
|
|
73
80
|
def permitted
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hubbado-policy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hubbado Devs
|
@@ -10,7 +10,7 @@ cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
|
-
name:
|
13
|
+
name: evt-casing
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- !ruby/object:Gem::Version
|
25
25
|
version: '0'
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
|
-
name: evt-
|
27
|
+
name: evt-record_invocation
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - ">="
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '0'
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
|
-
name: evt-
|
41
|
+
name: evt-template_method
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
55
|
+
name: i18n
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - ">="
|