ecm_rbac 1.2.1 → 2.0.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/app/services/ecm/rbac/import_default_permissions_service.rb +119 -90
- data/config/initializers/inject_user_concern.rb +7 -3
- data/lib/ecm/rbac/configuration.rb +1 -1
- data/lib/ecm/rbac/version.rb +1 -1
- data/lib/generators/ecm/rbac/install/templates/initializer.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ed4686cba3dff28833d93e5ab2537f8c99b10a0
|
4
|
+
data.tar.gz: ea2edbf2d87f23af58ec62653c6a360f682afc0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11f7cd004056ffb25338cbe0fd69c4399a1bf6fbdb92048b806960e022887d2e9b634b27db5df045a8fffdfd98112ad61138a1a8bcc3c7e4f44ea27cbb3546b2
|
7
|
+
data.tar.gz: 8e5582e3436bb0a88153fddffb1cf3cfc62eec56368eab193ad08dd2c6d60b72299fb1b1acb7b1e2c73c84781343d93af8ec8bcd9ac5d3b8367c24d4496ab48b
|
@@ -1,122 +1,151 @@
|
|
1
|
-
require_dependency 'itsf_services'
|
1
|
+
# require_dependency 'itsf_services'
|
2
2
|
require_dependency 'active_model/validations/file_readability_validator'
|
3
3
|
|
4
|
-
module Ecm
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
module Ecm
|
5
|
+
module Rbac
|
6
|
+
# Example:
|
7
|
+
#
|
8
|
+
# # config/rbac.yml:
|
9
|
+
# defaults:
|
10
|
+
# permissions:
|
11
|
+
# - posts/index
|
12
|
+
# - posts/show
|
13
|
+
# roles:
|
14
|
+
# member:
|
15
|
+
# - posts/index
|
16
|
+
# - posts/show
|
17
|
+
#
|
18
|
+
# # rails console:
|
19
|
+
# Ecm::Rbac::ImportDefaultPermissionsService.call
|
20
|
+
# =>
|
21
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Performing...
|
22
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Validating input...
|
23
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] => Done
|
24
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Loaded YAML from /home/johndoe/rails_application/config/rbac.yml
|
25
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Checking for valid YAML structure
|
26
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Loaded 2 permissions
|
27
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Loaded 1 roles
|
28
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Saved 2 permissions
|
29
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Saved 1 roles
|
30
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] Saved 2 role permissions
|
31
|
+
# [Ecm::Rbac::ImportDefaultPermissionsService] => Done
|
32
|
+
#
|
33
|
+
class ImportDefaultPermissionsService < ApplicationService
|
34
|
+
class Result < ApplicationService::Result
|
35
|
+
attr_accessor :permissions, :roles, :role_permissions
|
36
|
+
end
|
11
37
|
|
12
|
-
|
38
|
+
attr_accessor :filename
|
13
39
|
|
14
|
-
|
15
|
-
say 'Validating input' do
|
16
|
-
unless valid?
|
17
|
-
say "Inputs are invalid. Errors: #{errors.full_messages.to_sentence}"
|
18
|
-
say 'Aborted'
|
19
|
-
return
|
20
|
-
end
|
21
|
-
end
|
40
|
+
validates :filename, file_readability: true
|
22
41
|
|
23
|
-
|
24
|
-
|
42
|
+
def _perform
|
43
|
+
# say 'Validating input' do
|
44
|
+
# unless valid?
|
45
|
+
# say "Inputs are invalid. Errors: #{errors.full_messages.to_sentence}"
|
46
|
+
# say 'Aborted'
|
47
|
+
# return
|
48
|
+
# end
|
49
|
+
# end
|
25
50
|
|
26
|
-
|
27
|
-
|
51
|
+
return unless load_yaml
|
52
|
+
return unless yaml_structure_valid?
|
28
53
|
|
29
|
-
|
30
|
-
|
31
|
-
@result.role_permissions = create_or_update_role_permissions
|
32
|
-
end
|
54
|
+
load_permissions
|
55
|
+
load_roles
|
33
56
|
|
34
|
-
|
57
|
+
@result.permissions = create_or_update_permissions
|
58
|
+
@result.roles = create_or_update_roles
|
59
|
+
@result.role_permissions = create_or_update_role_permissions
|
60
|
+
end
|
35
61
|
|
36
|
-
|
37
|
-
@filename ||= Ecm::Rbac.default_permissions_filename.call
|
38
|
-
end
|
62
|
+
private
|
39
63
|
|
40
|
-
|
41
|
-
|
42
|
-
Ecm::Rbac::Permission.where(identifier: permission_identifier).first_or_initialize.tap do |permission|
|
43
|
-
permission.save!
|
44
|
-
end
|
64
|
+
def filename
|
65
|
+
@filename ||= Ecm::Rbac.default_permissions_filename.call
|
45
66
|
end
|
46
|
-
say "Saved #{permissions.count} permissions"
|
47
|
-
permissions
|
48
|
-
end
|
49
67
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
68
|
+
def create_or_update_permissions
|
69
|
+
permissions = @permissions.collect do |permission_identifier|
|
70
|
+
Ecm::Rbac::Permission.where(identifier: permission_identifier).first_or_initialize.tap do |permission|
|
71
|
+
permission.save!
|
72
|
+
end
|
54
73
|
end
|
74
|
+
say "Saved #{permissions.count} permissions"
|
75
|
+
permissions
|
55
76
|
end
|
56
|
-
say "Saved #{roles.count} roles"
|
57
|
-
roles
|
58
|
-
end
|
59
77
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
permission = Ecm::Rbac::Permission.where(identifier: permission_identifier).first
|
65
|
-
|
66
|
-
Ecm::Rbac::RolePermission.where(role_id: role, permission_id: permission).first_or_initialize.tap do |role_permission|
|
67
|
-
role_permission.save!
|
78
|
+
def create_or_update_roles
|
79
|
+
roles = @roles.collect do |role_identifier, permissions|
|
80
|
+
Ecm::Rbac::Role.where(identifier: role_identifier).first_or_initialize.tap do |role|
|
81
|
+
role.save!
|
68
82
|
end
|
69
83
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
def load_permissions
|
76
|
-
@permissions = @yaml[:defaults][:permissions] || []
|
77
|
-
say "Loaded #{@permissions.size} permissions"
|
78
|
-
end
|
84
|
+
say "Saved #{roles.count} roles"
|
85
|
+
roles
|
86
|
+
end
|
79
87
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
88
|
+
def create_or_update_role_permissions
|
89
|
+
role_permissions = @roles.collect do |role_identifier, permissions|
|
90
|
+
role = Ecm::Rbac::Role.where(identifier: role_identifier).first
|
91
|
+
(permissions ||[]).collect do |permission_identifier|
|
92
|
+
permission = Ecm::Rbac::Permission.where(identifier: permission_identifier).first
|
84
93
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
@yaml = yaml
|
94
|
+
Ecm::Rbac::RolePermission.where(role_id: role, permission_id: permission).first_or_initialize.tap do |role_permission|
|
95
|
+
role_permission.save!
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end.flatten
|
99
|
+
say "Saved #{role_permissions.count} role permissions"
|
100
|
+
role_permissions
|
93
101
|
end
|
94
|
-
end
|
95
102
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
add_error_and_say(:yaml_file, "Expected file content of #{filename} to parse to a Hash, but was #{@yaml.class}")
|
100
|
-
return false
|
103
|
+
def load_permissions
|
104
|
+
@permissions = @yaml[:defaults][:permissions] || []
|
105
|
+
say "Loaded #{@permissions.size} permissions"
|
101
106
|
end
|
102
107
|
|
103
|
-
|
104
|
-
|
105
|
-
|
108
|
+
def load_roles
|
109
|
+
@roles = @yaml[:defaults][:roles] || []
|
110
|
+
say "Loaded #{@roles.size} roles"
|
106
111
|
end
|
107
112
|
|
108
|
-
|
109
|
-
|
110
|
-
|
113
|
+
def load_yaml
|
114
|
+
yaml = YAML.load_file(filename)
|
115
|
+
if yaml
|
116
|
+
say "Loaded YAML from #{filename}"
|
117
|
+
@yaml = yaml.with_indifferent_access
|
118
|
+
else
|
119
|
+
say "Could not load YAML from #{filename}"
|
120
|
+
@yaml = yaml
|
121
|
+
end
|
111
122
|
end
|
112
123
|
|
124
|
+
def yaml_structure_valid?
|
125
|
+
say "Checking for valid YAML structure"
|
126
|
+
unless @yaml.is_a?(Hash)
|
127
|
+
add_error_and_say(:yaml_file, "Expected file content of #{filename} to parse to a Hash, but was #{@yaml.class}")
|
128
|
+
return false
|
129
|
+
end
|
130
|
+
|
131
|
+
unless @yaml.has_key?(:defaults)
|
132
|
+
add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:].")
|
133
|
+
return false
|
134
|
+
end
|
135
|
+
|
136
|
+
unless @yaml[:defaults].has_key?(:roles)
|
137
|
+
add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:][roles:].")
|
138
|
+
return false
|
139
|
+
end
|
113
140
|
|
114
|
-
unless @yaml[:defaults].has_key?(:permissions)
|
115
|
-
add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:][permissions:].")
|
116
|
-
return false
|
117
|
-
end
|
118
141
|
|
119
|
-
|
142
|
+
unless @yaml[:defaults].has_key?(:permissions)
|
143
|
+
add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:][permissions:].")
|
144
|
+
return false
|
145
|
+
end
|
146
|
+
|
147
|
+
return true
|
148
|
+
end
|
120
149
|
end
|
121
150
|
end
|
122
151
|
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
Rails.configuration.to_prepare do
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
begin
|
3
|
+
puts "Including Model::Ecm::Rbac::UserConcern in #{Ecm::Rbac.user_class_name}"
|
4
|
+
Ecm::Rbac.user_class_name.constantize.class_eval do
|
5
|
+
include Model::Ecm::Rbac::UserConcern
|
6
|
+
end
|
7
|
+
rescue NameError => e
|
8
|
+
"Could not include Model::Ecm::Rbac::UserConcern into #{Ecm::Rbac.user_class_name}. Error: #{e.message}"
|
5
9
|
end
|
6
10
|
end
|
@@ -10,7 +10,7 @@ module Ecm
|
|
10
10
|
|
11
11
|
mattr_accessor(:user_class_name) { 'User' }
|
12
12
|
|
13
|
-
mattr_accessor(:default_permissions_filename) { -> { Rails.root.join('config', '
|
13
|
+
mattr_accessor(:default_permissions_filename) { -> { Rails.root.join('config', 'rbac.yml') } }
|
14
14
|
|
15
15
|
def self.user_class
|
16
16
|
user_class_name.constantize
|
data/lib/ecm/rbac/version.rb
CHANGED
@@ -8,7 +8,7 @@ Ecm::Rbac.configure do |config|
|
|
8
8
|
# Set the path of your default permissions file that will be used by
|
9
9
|
# Ecm::Rbac::ImportDefaultPermissionsService
|
10
10
|
#
|
11
|
-
# default: config.default_permissions_filename = -> { Rails.root.join('config', '
|
11
|
+
# default: config.default_permissions_filename = -> { Rails.root.join('config', 'rbac.yml') }
|
12
12
|
#
|
13
|
-
config.default_permissions_filename = -> { Rails.root.join('config', '
|
13
|
+
config.default_permissions_filename = -> { Rails.root.join('config', 'rbac.yml') }
|
14
14
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecm_rbac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Vasquez Angel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|