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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d2fb5aa9df2560e3108782604386f1ef0a4ed1c
4
- data.tar.gz: c83662e5bb3e4a978d8c5a0fb9f04614ba0d38d3
3
+ metadata.gz: 5ed4686cba3dff28833d93e5ab2537f8c99b10a0
4
+ data.tar.gz: ea2edbf2d87f23af58ec62653c6a360f682afc0f
5
5
  SHA512:
6
- metadata.gz: c53db95549cce94c85e00ca64c2975c442be38c82d2988d3497648683bbb8a76cf13769a22de4a8732d18e7aa2bbf6c27d87fd92fd4139cb67074587f3da03b9
7
- data.tar.gz: a2dbd6866250e12f345bbff1f7dbc045b1c35864547e4db28d63dac2924eb1b1cb409c4d9c345daf91d947d2d0c680ada61cbf41637b284ae42840b8522b47fc
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::Rbac
5
- class ImportDefaultPermissionsService < ApplicationService
6
- class Result < ApplicationService::Result
7
- attr_accessor :permissions, :roles, :role_permissions
8
- end
9
-
10
- attr_accessor :filename
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
- validates :filename, file_readability: true
38
+ attr_accessor :filename
13
39
 
14
- def _perform
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
- return unless load_yaml
24
- return unless yaml_structure_valid?
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
- load_permissions
27
- load_roles
51
+ return unless load_yaml
52
+ return unless yaml_structure_valid?
28
53
 
29
- @result.permissions = create_or_update_permissions
30
- @result.roles = create_or_update_roles
31
- @result.role_permissions = create_or_update_role_permissions
32
- end
54
+ load_permissions
55
+ load_roles
33
56
 
34
- private
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
- def filename
37
- @filename ||= Ecm::Rbac.default_permissions_filename.call
38
- end
62
+ private
39
63
 
40
- def create_or_update_permissions
41
- permissions = @permissions.collect do |permission_identifier|
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
- def create_or_update_roles
51
- roles = @roles.collect do |role_identifier, permissions|
52
- Ecm::Rbac::Role.where(identifier: role_identifier).first_or_initialize.tap do |role|
53
- role.save!
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
- def create_or_update_role_permissions
61
- role_permissions = @roles.collect do |role_identifier, permissions|
62
- role = Ecm::Rbac::Role.where(identifier: role_identifier).first
63
- (permissions ||[]).collect do |permission_identifier|
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
- end.flatten
71
- say "Saved #{role_permissions.count} role permissions"
72
- role_permissions
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
- def load_roles
81
- @roles = @yaml[:defaults][:roles] || []
82
- say "Loaded #{@roles.size} roles"
83
- end
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
- def load_yaml
86
- yaml = YAML.load_file(filename)
87
- if yaml
88
- say "Loaded YAML from #{filename}"
89
- @yaml = yaml.with_indifferent_access
90
- else
91
- say "Could not load YAML from #{filename}"
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
- def yaml_structure_valid?
97
- say "Checking for valid YAML structure"
98
- unless @yaml.is_a?(Hash)
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
- unless @yaml.has_key?(:defaults)
104
- add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:].")
105
- return false
108
+ def load_roles
109
+ @roles = @yaml[:defaults][:roles] || []
110
+ say "Loaded #{@roles.size} roles"
106
111
  end
107
112
 
108
- unless @yaml[:defaults].has_key?(:roles)
109
- add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:][roles:].")
110
- return false
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
- return true
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
- puts "Including Model::Ecm::Rbac::UserConcern in #{Ecm::Rbac.user_class_name}"
3
- Ecm::Rbac.user_class_name.constantize.class_eval do
4
- include Model::Ecm::Rbac::UserConcern
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', 'permissions', 'default.yml') } }
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
@@ -1,5 +1,5 @@
1
1
  module Ecm
2
2
  module Rbac
3
- VERSION = '1.2.1'.freeze
3
+ VERSION = '2.0.0'.freeze
4
4
  end
5
5
  end
@@ -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', 'permissions', 'default.yml') }
11
+ # default: config.default_permissions_filename = -> { Rails.root.join('config', 'rbac.yml') }
12
12
  #
13
- config.default_permissions_filename = -> { Rails.root.join('config', 'permissions', 'default.yml') }
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: 1.2.1
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-03-24 00:00:00.000000000 Z
11
+ date: 2018-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails