bullet_train-roles 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +2 -1
- data/Gemfile.lock +6 -5
- data/lib/bullet_train/roles/engine.rb +17 -0
- data/lib/bullet_train/roles/version.rb +1 -1
- data/lib/bullet_train/roles.rb +2 -0
- data/lib/roles/permit.rb +39 -21
- data/lib/roles/user.rb +4 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22f9bcc3e444766f5813562e0506db8f9b921f141ce2ce77eb3d30156418c80f
|
4
|
+
data.tar.gz: 7db6d4154b2bd4e58e7d35455635b55b84f6e66424e1f4e9b26a82e908865dbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ece8c36a0ae647489604813e15646ec1096d62f3980d032892ceefd21b8bf7a5f82430ad6a58219edf287994ee0019a7dc00dbe2939782ac7e24b1ff0b77188
|
7
|
+
data.tar.gz: 0a386a84154f7d192019ab68d5be0094b3fcd6827dd53f29bf629fa0ed15a8ff8546bbd2fb382b9a4e3b30e13d922de0b7e2d819c08c03fb4662516f193df0af
|
data/.circleci/config.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -9,7 +9,7 @@ GIT
|
|
9
9
|
PATH
|
10
10
|
remote: .
|
11
11
|
specs:
|
12
|
-
bullet_train-roles (0.1.
|
12
|
+
bullet_train-roles (0.1.9)
|
13
13
|
active_hash
|
14
14
|
activesupport
|
15
15
|
cancancan
|
@@ -102,11 +102,11 @@ GEM
|
|
102
102
|
marcel (1.0.2)
|
103
103
|
method_source (1.0.0)
|
104
104
|
mini_mime (1.1.2)
|
105
|
+
mini_portile2 (2.6.1)
|
105
106
|
minitest (5.15.0)
|
106
107
|
nio4r (2.5.8)
|
107
|
-
nokogiri (1.12.5
|
108
|
-
|
109
|
-
nokogiri (1.12.5-x86_64-darwin)
|
108
|
+
nokogiri (1.12.5)
|
109
|
+
mini_portile2 (~> 2.6.1)
|
110
110
|
racc (~> 1.4)
|
111
111
|
parallel (1.21.0)
|
112
112
|
parser (3.0.3.2)
|
@@ -176,6 +176,7 @@ GEM
|
|
176
176
|
PLATFORMS
|
177
177
|
arm64-darwin-20
|
178
178
|
arm64-darwin-21
|
179
|
+
ruby
|
179
180
|
x86_64-darwin-21
|
180
181
|
|
181
182
|
DEPENDENCIES
|
@@ -191,4 +192,4 @@ DEPENDENCIES
|
|
191
192
|
standard (~> 1.5.0)
|
192
193
|
|
193
194
|
BUNDLED WITH
|
194
|
-
2.3.
|
195
|
+
2.3.13
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BulletTrain
|
2
|
+
module Roles
|
3
|
+
class Engine < ::Rails::Engine
|
4
|
+
config.eager_load_paths << Role.full_path
|
5
|
+
|
6
|
+
initializer "bullet_train-roles.config" do |app|
|
7
|
+
role_reloader = ActiveSupport::FileUpdateChecker.new([Role.full_path]) do
|
8
|
+
Role.reload(true)
|
9
|
+
end
|
10
|
+
|
11
|
+
ActiveSupport::Reloader.to_prepare do
|
12
|
+
role_reloader.execute_if_updated
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/bullet_train/roles.rb
CHANGED
data/lib/roles/permit.rb
CHANGED
@@ -2,48 +2,66 @@
|
|
2
2
|
|
3
3
|
module Roles
|
4
4
|
module Permit
|
5
|
-
def permit(user, through:, parent:, debug: false, intermediary: nil)
|
6
|
-
# Without this, you need to restart the server each time you make changes to the config/models/role.yml file
|
7
|
-
Role.reload(true) if Rails.env.development?
|
8
|
-
|
5
|
+
def permit(user, through:, parent:, debug: false, intermediary: nil, cache_key: nil)
|
9
6
|
# When changing permissions during development, you may also want to do this on each request:
|
10
7
|
# User.update_all ability_cache: nil if Rails.env.development?
|
11
|
-
|
8
|
+
permissions = if cache_key
|
9
|
+
Rails.cache.fetch(cache_key) do
|
10
|
+
build_permissions(user, through, parent, intermediary)
|
11
|
+
end
|
12
|
+
else
|
13
|
+
build_permissions(user, through, parent, intermediary)
|
14
|
+
end
|
15
|
+
|
16
|
+
permissions.each do |permission|
|
17
|
+
can(permission.actions, permission.model.constantize, permission.condition) unless permission.is_debug
|
18
|
+
end
|
19
|
+
|
20
|
+
if debug
|
21
|
+
puts "###########################"
|
22
|
+
puts "Auto generated `ability.rb` content:"
|
23
|
+
permissions.map do |permission|
|
24
|
+
if permission.is_debug
|
25
|
+
puts permission.info
|
26
|
+
else
|
27
|
+
puts "can #{permission.actions}, #{permission.model}, #{permission.condition}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
puts "############################"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def build_permissions(user, through, parent, intermediary)
|
12
35
|
added_roles = Set.new
|
36
|
+
permissions = []
|
13
37
|
user.send(through).map(&:roles).flatten.uniq.each do |role|
|
14
38
|
unless added_roles.include?(role)
|
15
|
-
|
16
|
-
|
39
|
+
permissions << OpenStruct.new(is_debug: true, info: "########### ROLE: #{role.key}")
|
40
|
+
permissions += add_abilities_for(role, user, through, parent, intermediary)
|
17
41
|
added_roles << role
|
18
42
|
end
|
19
43
|
|
20
44
|
role.included_roles.each do |included_role|
|
21
45
|
unless added_roles.include?(included_role)
|
22
|
-
|
23
|
-
|
46
|
+
permissions << OpenStruct.new(is_debug: true, info: "############# INCLUDED ROLE: #{included_role.key}")
|
47
|
+
permissions += add_abilities_for(included_role, user, through, parent, intermediary)
|
24
48
|
end
|
25
49
|
end
|
26
50
|
end
|
27
51
|
|
28
|
-
|
29
|
-
puts "###########################"
|
30
|
-
puts "Auto generated `ability.rb` content:"
|
31
|
-
puts output
|
32
|
-
puts "############################"
|
33
|
-
end
|
52
|
+
permissions
|
34
53
|
end
|
35
54
|
|
36
55
|
def add_abilities_for(role, user, through, parent, intermediary)
|
37
|
-
|
56
|
+
permissions = []
|
38
57
|
role.ability_generator(user, through, parent, intermediary) do |ag|
|
39
|
-
if ag.valid?
|
40
|
-
|
41
|
-
can(ag.actions, ag.model, ag.condition)
|
58
|
+
permissions << if ag.valid?
|
59
|
+
OpenStruct.new(is_debug: false, actions: ag.actions, model: ag.model.to_s, condition: ag.condition)
|
42
60
|
else
|
43
|
-
|
61
|
+
OpenStruct.new(is_debug: true, info: "# #{ag.model} does not respond to #{parent} so we're not going to add an ability for the #{through} context")
|
44
62
|
end
|
45
63
|
end
|
46
|
-
|
64
|
+
permissions
|
47
65
|
end
|
48
66
|
end
|
49
67
|
end
|
data/lib/roles/user.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bullet_train-roles
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Prabin Poudel
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-08-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: byebug
|
@@ -185,6 +185,7 @@ files:
|
|
185
185
|
- bin/setup
|
186
186
|
- bullet_train-roles.gemspec
|
187
187
|
- lib/bullet_train/roles.rb
|
188
|
+
- lib/bullet_train/roles/engine.rb
|
188
189
|
- lib/bullet_train/roles/version.rb
|
189
190
|
- lib/generators/bullet_train/roles/install/USAGE
|
190
191
|
- lib/generators/bullet_train/roles/install/install_generator.rb
|
@@ -215,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
216
|
- !ruby/object:Gem::Version
|
216
217
|
version: '0'
|
217
218
|
requirements: []
|
218
|
-
rubygems_version: 3.
|
219
|
+
rubygems_version: 3.3.7
|
219
220
|
signing_key:
|
220
221
|
specification_version: 4
|
221
222
|
summary: Yaml-backed ApplicationHash for CanCan Roles
|