effective_roles 2.0.2 → 2.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1f0c20e5d0b528fda1c4c550d4532a9e3f28b3117aa692bb8e25a6da5443a2f
4
- data.tar.gz: 359fdf3f7ca51f81fe4e50f363cc0e89aeccd93ff536b579597dabc87c6647b2
3
+ metadata.gz: c4de9cee717076b8282e1f92ec075ebc708a2547d13dea34be7c0ece27a14bda
4
+ data.tar.gz: 857e95906133cc6850e2e2d6e3c4e74d1e1d1c95a666290adf6c30f6c556d7d0
5
5
  SHA512:
6
- metadata.gz: 0fe0946beed78c8986bb94ee0c8335e9a94c9cbc588f3df059279c01cf1ec4326bdaae69917ccff2ac9c3c7e213721cdf494bbdadf8516356a4fdf04885f60c2
7
- data.tar.gz: b922f99dbf1f7c1149c0195fc1785a98b50ee5e74c03cb3dd101209bf6d4eea31cd58a393097cacbccb6273dcd7a477730b5ac0acdb7eb8e9b5480f1be2b65de
6
+ metadata.gz: 4e5c8535bf6364ff85d8a667f83266e9add5fa025e3377f7fa66201c32116f8dfd7b3541c9378b521262c19c144184fc6ff05ee376270886076382feb7536681
7
+ data.tar.gz: 10b1a3e174852d4b6e1833dfe0ae28a084949139d923074822a4b1033511715cba42e977864447ac85e35fcaa17971d06237e787e33e62dcd6427b788f8eab4a
@@ -32,10 +32,6 @@ module ActsAsRoleRestricted
32
32
  validate(if: -> { changes.include?(:roles_mask) && EffectiveRoles.assignable_roles_present?(self) }) do
33
33
  user = current_user || EffectiveRoles.current_user || (EffectiveLogging.current_user if defined?(EffectiveLogging))
34
34
 
35
- if user.blank? && defined?(Rails::Server)
36
- self.errors.add(:roles, 'current_user must be present when assigning roles')
37
- end
38
-
39
35
  roles_was = EffectiveRoles.roles_for(changes[:roles_mask].first)
40
36
  changed = (roles + roles_was) - (roles & roles_was) # XOR
41
37
 
@@ -49,6 +45,10 @@ module ActsAsRoleRestricted
49
45
  Rails.logger.info "\e[31m unassignable roles: #{unauthorized.map { |role| ":#{role}" }.to_sentence}"
50
46
  end
51
47
 
48
+ if unauthorized.present? && user.blank? && defined?(Rails::Server)
49
+ self.errors.add(:roles, 'current_user must be present when assigning roles')
50
+ end
51
+
52
52
  self.roles_mask = EffectiveRoles.roles_mask_for(authorized)
53
53
  end
54
54
 
@@ -62,7 +62,8 @@ EffectiveRoles.setup do |config|
62
62
  # config.assignable_roles = {
63
63
  # :superadmin => [:superadmin, :admin, :member], # Superadmins may assign any resource any role
64
64
  # :admin => [:admin, :member], # Admins may only assign the :admin or :member role
65
- # :member => [] # Members may not assign any roles
65
+ # :member => [], # Members may not assign any roles
66
+ # :new_record => [:member] # Member may be assigned to a new_record without a current_user
66
67
  # }
67
68
 
68
69
  # Authorization Method
@@ -100,22 +100,41 @@ module EffectiveRoles
100
100
  raise('expected current_user to respond to is_role_restricted?')
101
101
  end
102
102
 
103
- assignable = if assignable_roles.kind_of?(Array)
104
- assignable_roles
105
- elsif current_user.present?
106
- current_roles = assignable_roles[resource.class.to_s] || assignable_roles || {}
107
- current_user.roles.map { |role| current_roles[role] }.flatten.compact.uniq
108
- else
109
- current_roles = assignable_roles[resource.class.to_s] || assignable_roles || {}
110
- current_roles.values.flatten.uniq
103
+ if !resource.respond_to?(:is_role_restricted?)
104
+ raise('expected current_user to respond to is_role_restricted?')
111
105
  end
112
106
 
107
+ assigned_roles = if assignable_roles.kind_of?(Hash)
108
+ assignable = (assignable_roles[resource.class.to_s] || assignable_roles || {})
109
+ assigned = [] # our return value
110
+
111
+ if current_user.blank?
112
+ assigned = assignable.values.flatten
113
+ end
114
+
115
+ if current_user.present?
116
+ assigned = current_user.roles.map { |role| assignable[role] }.flatten.compact
117
+ end
118
+
119
+ if assignable[:new_record] && resource.new_record?
120
+ assigned += Array(assignable[:new_record])
121
+ end
122
+
123
+ if assignable[:persisted] && resource.persisted?
124
+ assigned += Array(assignable[:persisted])
125
+ end
126
+
127
+ assigned
128
+ elsif assignable_roles.kind_of?(Array)
129
+ assignable_roles
130
+ end.uniq
131
+
113
132
  # Check boxes
114
133
  multiple = resource.acts_as_role_restricted_options[:multiple] if multiple.nil?
115
- return assignable if multiple
134
+ return assigned_roles if multiple
116
135
 
117
136
  # Radios
118
- (resource.roles - assignable).present? ? [] : assignable
137
+ (resource.roles - assigned_roles).present? ? [] : assigned_roles
119
138
  end
120
139
 
121
140
  def self.assignable_roles_present?(resource)
@@ -1,3 +1,3 @@
1
1
  module EffectiveRoles
2
- VERSION = '2.0.2'.freeze
2
+ VERSION = '2.0.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_roles
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-03 00:00:00.000000000 Z
11
+ date: 2019-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails