rabarber 4.1.2 → 4.1.3
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 +10 -0
- data/lib/rabarber/core/cache.rb +9 -10
- data/lib/rabarber/core/null_roleable.rb +4 -0
- data/lib/rabarber/core/rule.rb +2 -3
- data/lib/rabarber/models/concerns/has_roles.rb +3 -3
- data/lib/rabarber/models/role.rb +1 -1
- data/lib/rabarber/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed0e1d5cc00bc6f410b2a677afb591fa4bb1acd21a7674729edc91e7c5b72cc1
|
4
|
+
data.tar.gz: 7dd9ded3179f7aef89f36a0983f28fe6f4695cd7e535cdeeba4d208053f8d53f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99920a8e65cd953f2ddac63083628680b92f89195a65759b64e25d5619099517ad332b8821d2c681a2c0503286617aff0a26f41d5f5f99623fc678a33a028c93
|
7
|
+
data.tar.gz: ce9ddfa4d718ac7d2b2533c3c87ad9cc5d3658cb1b23aa4ae1f0e75fe544186a37fb30bbea97b14c0fc9623cdb94ef9bb41c75ae0ea6b27d5a6a72dd62250d17
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## v4.1.3
|
2
|
+
|
3
|
+
### Bugs:
|
4
|
+
|
5
|
+
- Fixed an issue where role presence checking did not work correctly if `must_have_roles` configuration option was enabled
|
6
|
+
|
7
|
+
### Misc:
|
8
|
+
|
9
|
+
- Added caching for `Rabarber::HasRoles#all_roles` method to improve performance
|
10
|
+
|
1
11
|
## v4.1.2
|
2
12
|
|
3
13
|
### Misc:
|
data/lib/rabarber/core/cache.rb
CHANGED
@@ -5,22 +5,18 @@ require "digest/sha2"
|
|
5
5
|
module Rabarber
|
6
6
|
module Core
|
7
7
|
module Cache
|
8
|
-
CACHE_PREFIX = "rabarber"
|
9
|
-
private_constant :CACHE_PREFIX
|
10
|
-
|
11
8
|
module_function
|
12
9
|
|
13
|
-
def fetch(
|
10
|
+
def fetch(key, &)
|
14
11
|
return yield unless enabled?
|
15
12
|
|
16
|
-
Rails.cache.fetch(
|
13
|
+
Rails.cache.fetch(prepare_key(key), expires_in: 1.hour, race_condition_ttl: 5.seconds, &)
|
17
14
|
end
|
18
15
|
|
19
|
-
def delete(*
|
16
|
+
def delete(*keys)
|
20
17
|
return unless enabled?
|
21
18
|
|
22
|
-
keys
|
23
|
-
Rails.cache.delete_multi(keys) if keys.any?
|
19
|
+
Rails.cache.delete_multi(keys.map { prepare_key(_1) }) if keys.any?
|
24
20
|
end
|
25
21
|
|
26
22
|
def enabled?
|
@@ -31,9 +27,12 @@ module Rabarber
|
|
31
27
|
Rails.cache.delete_matched(/^#{CACHE_PREFIX}/o)
|
32
28
|
end
|
33
29
|
|
34
|
-
def
|
35
|
-
"#{CACHE_PREFIX}:#{Digest::SHA2.hexdigest(
|
30
|
+
def prepare_key(key)
|
31
|
+
"#{CACHE_PREFIX}:#{Digest::SHA2.hexdigest(Marshal.dump(key))}"
|
36
32
|
end
|
33
|
+
|
34
|
+
CACHE_PREFIX = "rabarber"
|
35
|
+
private_constant :CACHE_PREFIX
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
data/lib/rabarber/core/rule.rb
CHANGED
@@ -17,10 +17,9 @@ module Rabarber
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def roles_permitted?(roleable, controller_instance)
|
20
|
-
|
21
|
-
return false if Rabarber::Configuration.instance.must_have_roles && roleable.roles(context: resolved_context).empty?
|
20
|
+
return false if Rabarber::Configuration.instance.must_have_roles && roleable.all_roles.empty?
|
22
21
|
|
23
|
-
roles.empty? || roleable.has_role?(*roles, context:
|
22
|
+
roles.empty? || roleable.has_role?(*roles, context: resolve_context(controller_instance))
|
24
23
|
end
|
25
24
|
|
26
25
|
def dynamic_rules_followed?(controller_instance)
|
@@ -16,11 +16,11 @@ module Rabarber
|
|
16
16
|
|
17
17
|
def roles(context: nil)
|
18
18
|
processed_context = process_context(context)
|
19
|
-
Rabarber::Core::Cache.fetch(roleable_id,
|
19
|
+
Rabarber::Core::Cache.fetch([roleable_id, processed_context]) { rabarber_roles.names(context: processed_context) }
|
20
20
|
end
|
21
21
|
|
22
22
|
def all_roles
|
23
|
-
rabarber_roles.all_names
|
23
|
+
Rabarber::Core::Cache.fetch([roleable_id, :all]) { rabarber_roles.all_names }
|
24
24
|
end
|
25
25
|
|
26
26
|
def has_role?(*role_names, context: nil)
|
@@ -102,7 +102,7 @@ module Rabarber
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def delete_roleable_cache(context:)
|
105
|
-
Rabarber::Core::Cache.delete(roleable_id, context:)
|
105
|
+
Rabarber::Core::Cache.delete([roleable_id, context], [roleable_id, :all])
|
106
106
|
end
|
107
107
|
|
108
108
|
def roleable_id
|
data/lib/rabarber/models/role.rb
CHANGED
@@ -67,7 +67,7 @@ module Rabarber
|
|
67
67
|
private
|
68
68
|
|
69
69
|
def delete_roleables_cache(role, context:)
|
70
|
-
Rabarber::Core::Cache.delete(*assigned_to_roleables(role), context:)
|
70
|
+
Rabarber::Core::Cache.delete(*assigned_to_roleables(role).flat_map { [[_1, context], [_1, :all]] })
|
71
71
|
end
|
72
72
|
|
73
73
|
def assigned_to_roleables(role)
|
data/lib/rabarber/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabarber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- enjaku4
|
8
8
|
- trafium
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|