rabarber 4.0.2 → 4.1.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 +11 -0
- data/README.md +17 -1
- data/lib/rabarber/models/concerns/has_roles.rb +5 -1
- data/lib/rabarber/models/role.rb +20 -0
- 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: 5450b60dd272da8e0b78af00e44a3e82b29c7b9a9e8b510c68efccbba30ba150
|
4
|
+
data.tar.gz: 7bbdd6de4ed8f2e33be07363c9c9d4e099170099ca7cb32a50df217373503284
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c9aa4a196f99dbb5250dd1b625fed829418843f5de8f35a4b2cde5f933f8780be0865f8c23e90c57490a3358f004fd1168dc28bcc9be9f66f0bb56b9ebcfddf
|
7
|
+
data.tar.gz: 3ddc04e91777a31631d4e9db9a54d6d1e23f588935e09c9d9691f8c607fffbabe18a49553cc9bad22ed8944dbec8b6cb58ecaf6a432c7ac7da59c1aca27a334f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## v4.1.0
|
2
|
+
|
3
|
+
### Features:
|
4
|
+
|
5
|
+
- Added `Rabarber::Role.all_names` method to retrieve all roles available in the application, grouped by context
|
6
|
+
- Added `Rabarber::HasRoles#all_roles` method to retrieve all roles assigned to a user, grouped by context
|
7
|
+
|
8
|
+
### Bugs:
|
9
|
+
|
10
|
+
- Fixed potential bug in role revocation caused by checking for the presence of a role in the cache instead of the database
|
11
|
+
|
1
12
|
## v4.0.2
|
2
13
|
|
3
14
|
### Misc:
|
data/README.md
CHANGED
@@ -158,6 +158,14 @@ To get the list of roles assigned to the user, use:
|
|
158
158
|
user.roles
|
159
159
|
```
|
160
160
|
|
161
|
+
**`#all_roles`**
|
162
|
+
|
163
|
+
To get all roles assigned to the user, grouped by context, use:
|
164
|
+
|
165
|
+
```rb
|
166
|
+
user.all_roles
|
167
|
+
```
|
168
|
+
|
161
169
|
---
|
162
170
|
|
163
171
|
To manipulate roles directly, you can use `Rabarber::Role` methods:
|
@@ -203,12 +211,20 @@ Rabarber::Role.remove(:admin, force: true)
|
|
203
211
|
|
204
212
|
**`.names(context: nil)`**
|
205
213
|
|
206
|
-
If you need to list the
|
214
|
+
If you need to list the roles available in your application, use:
|
207
215
|
|
208
216
|
```rb
|
209
217
|
Rabarber::Role.names
|
210
218
|
```
|
211
219
|
|
220
|
+
**`.all_names`**
|
221
|
+
|
222
|
+
If you need list all roles available in your application, grouped by context, use:
|
223
|
+
|
224
|
+
```rb
|
225
|
+
Rabarber::Role.all_names
|
226
|
+
```
|
227
|
+
|
212
228
|
**`.assignees(role_name, context: nil)`**
|
213
229
|
|
214
230
|
To get all the users to whom the role is assigned, use:
|
@@ -19,6 +19,10 @@ module Rabarber
|
|
19
19
|
Rabarber::Core::Cache.fetch(roleable_id, context: processed_context) { rabarber_roles.names(context: processed_context) }
|
20
20
|
end
|
21
21
|
|
22
|
+
def all_roles
|
23
|
+
rabarber_roles.all_names
|
24
|
+
end
|
25
|
+
|
22
26
|
def has_role?(*role_names, context: nil)
|
23
27
|
processed_context = process_context(context)
|
24
28
|
processed_roles = process_role_names(role_names)
|
@@ -55,7 +59,7 @@ module Rabarber
|
|
55
59
|
processed_context = process_context(context)
|
56
60
|
|
57
61
|
roles_to_revoke = Rabarber::Role.where(
|
58
|
-
name: processed_role_names.intersection(
|
62
|
+
name: processed_role_names.intersection(rabarber_roles.names(context: processed_context)), **processed_context
|
59
63
|
)
|
60
64
|
|
61
65
|
if roles_to_revoke.any?
|
data/lib/rabarber/models/role.rb
CHANGED
@@ -9,6 +9,8 @@ module Rabarber
|
|
9
9
|
format: { with: Rabarber::Input::Role::REGEX },
|
10
10
|
strict: true
|
11
11
|
|
12
|
+
belongs_to :context, polymorphic: true, optional: true
|
13
|
+
|
12
14
|
before_destroy :delete_assignments
|
13
15
|
|
14
16
|
class << self
|
@@ -16,6 +18,14 @@ module Rabarber
|
|
16
18
|
where(process_context(context)).pluck(:name).map(&:to_sym)
|
17
19
|
end
|
18
20
|
|
21
|
+
def all_names
|
22
|
+
includes(:context).group_by(&:context).transform_values { |roles| roles.map { _1.name.to_sym } }
|
23
|
+
rescue ActiveRecord::RecordNotFound => e
|
24
|
+
raise Rabarber::Error, "Context not found: #{e.model}##{e.id}"
|
25
|
+
rescue NameError => e
|
26
|
+
raise Rabarber::Error, "Context not found: #{e.name}"
|
27
|
+
end
|
28
|
+
|
19
29
|
def add(name, context: nil)
|
20
30
|
name = process_role_name(name)
|
21
31
|
processed_context = process_context(context)
|
@@ -77,6 +87,16 @@ module Rabarber
|
|
77
87
|
end
|
78
88
|
end
|
79
89
|
|
90
|
+
def context
|
91
|
+
return context_type.constantize if context_type.present? && context_id.blank?
|
92
|
+
|
93
|
+
record = super
|
94
|
+
|
95
|
+
raise ActiveRecord::RecordNotFound.new(nil, context_type, nil, context_id) if context_id.present? && !record
|
96
|
+
|
97
|
+
record
|
98
|
+
end
|
99
|
+
|
80
100
|
private
|
81
101
|
|
82
102
|
def delete_assignments
|
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.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- enjaku4
|
8
8
|
- trafium
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-12-
|
11
|
+
date: 2024-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|