effective_roles 2.0.1 → 2.0.2

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: 06f6a3d9bee34bb09cb46dca52cf1d7837ed636c9a1888e244aff16c1f8b772c
4
- data.tar.gz: 708a5daa2f874de24e5fe8b80f1cd1e4731d9fc30630f18ab16c666d47749e34
3
+ metadata.gz: e1f0c20e5d0b528fda1c4c550d4532a9e3f28b3117aa692bb8e25a6da5443a2f
4
+ data.tar.gz: 359fdf3f7ca51f81fe4e50f363cc0e89aeccd93ff536b579597dabc87c6647b2
5
5
  SHA512:
6
- metadata.gz: a960a0fc29fbfec810675e507628dcf4c6aa2327685866c02e51d267a163869e3ed19c9f6cb92b3ceb7f21315c4d6c42f1f7e19efa374f944970778cf62ad3c7
7
- data.tar.gz: 5d51969cfd0d88df911f5c79c550ce5085422ba82670250bb93781f5d95c298578d8c5b5c74bc3dfe4744f04b216ea2aaa00bccfefd097cf24491a5548d1f4a6
6
+ metadata.gz: 0fe0946beed78c8986bb94ee0c8335e9a94c9cbc588f3df059279c01cf1ec4326bdaae69917ccff2ac9c3c7e213721cdf494bbdadf8516356a4fdf04885f60c2
7
+ data.tar.gz: b922f99dbf1f7c1149c0195fc1785a98b50ee5e74c03cb3dd101209bf6d4eea31cd58a393097cacbccb6273dcd7a477730b5ac0acdb7eb8e9b5480f1be2b65de
@@ -29,10 +29,10 @@ module ActsAsRoleRestricted
29
29
 
30
30
  validates :roles_mask, numericality: true, allow_nil: true
31
31
 
32
- validate(if: -> { changes.include?(:roles_mask) }) do
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? && EffectiveRoles.assignable_roles.present? && defined?(Rails::Server)
35
+ if user.blank? && defined?(Rails::Server)
36
36
  self.errors.add(:roles, 'current_user must be present when assigning roles')
37
37
  end
38
38
 
@@ -45,6 +45,10 @@ module ActsAsRoleRestricted
45
45
  authorized = roles.dup
46
46
  unauthorized.each { |role| authorized.include?(role) ? authorized.delete(role) : authorized.push(role) }
47
47
 
48
+ if unauthorized.present?
49
+ Rails.logger.info "\e[31m unassignable roles: #{unauthorized.map { |role| ":#{role}" }.to_sentence}"
50
+ end
51
+
48
52
  self.roles_mask = EffectiveRoles.roles_mask_for(authorized)
49
53
  end
50
54
 
@@ -53,6 +53,8 @@ EffectiveRoles.setup do |config|
53
53
  # :superadmin => [:superadmin, :admin, :member], # Superadmins may create Pages for any role
54
54
  # :admin => [:admin, :member], # Admins may create Pages for admin and members
55
55
  # :member => [:member] # Members may create Pages for members
56
+ # },
57
+ # 'Post' => false # Don't enforce assignable roles validation
56
58
  # }
57
59
  #
58
60
  # Or just keep it simple, and use this Hash syntax of permissions for every resource
@@ -92,15 +92,14 @@ module EffectiveRoles
92
92
  end
93
93
 
94
94
  def self.assignable_roles_collection(resource, current_user = nil, multiple: nil)
95
- return roles if assignable_roles.nil?
95
+ return roles unless assignable_roles_present?(resource)
96
96
 
97
- raise 'EffectiveRoles config.assignable_roles_for must be a Hash, Array or nil' unless [Hash, Array].include?(assignable_roles.class)
98
- raise('expected resource to respond to is_role_restricted?') unless resource.respond_to?(:is_role_restricted?)
99
- raise('expected current_user to respond to is_role_restricted?') if current_user && !current_user.respond_to?(:is_role_restricted?)
100
-
101
- multiple = resource.acts_as_role_restricted_options[:multiple] if multiple.nil?
102
97
  current_user ||= (EffectiveRoles.current_user || (EffectiveLogging.current_user if defined?(EffectiveLogging)))
103
98
 
99
+ if current_user && !current_user.respond_to?(:is_role_restricted?)
100
+ raise('expected current_user to respond to is_role_restricted?')
101
+ end
102
+
104
103
  assignable = if assignable_roles.kind_of?(Array)
105
104
  assignable_roles
106
105
  elsif current_user.present?
@@ -112,12 +111,30 @@ module EffectiveRoles
112
111
  end
113
112
 
114
113
  # Check boxes
114
+ multiple = resource.acts_as_role_restricted_options[:multiple] if multiple.nil?
115
115
  return assignable if multiple
116
116
 
117
117
  # Radios
118
118
  (resource.roles - assignable).present? ? [] : assignable
119
119
  end
120
120
 
121
+ def self.assignable_roles_present?(resource)
122
+ return false if assignable_roles.nil?
123
+
124
+ raise 'EffectiveRoles config.assignable_roles_for must be a Hash, Array or nil' unless [Hash, Array].include?(assignable_roles.class)
125
+ raise('expected resource to respond to is_role_restricted?') unless resource.respond_to?(:is_role_restricted?)
126
+
127
+ return assignable_roles.present? if assignable_roles.kind_of?(Array)
128
+
129
+ if assignable_roles.kind_of?(Array)
130
+ assignable_roles
131
+ elsif assignable_roles.key?(resource.class.to_s)
132
+ assignable_roles[resource.class.to_s]
133
+ else
134
+ assignable_roles
135
+ end.present?
136
+ end
137
+
121
138
  # This is used by the effective_roles_summary_table helper method
122
139
  def self.authorization_level(controller, role, resource)
123
140
  return :unknown unless (authorization_method.respond_to?(:call) || authorization_method.kind_of?(Symbol))
@@ -1,3 +1,3 @@
1
1
  module EffectiveRoles
2
- VERSION = '2.0.1'.freeze
2
+ VERSION = '2.0.2'.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.1
4
+ version: 2.0.2
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-05-28 00:00:00.000000000 Z
11
+ date: 2019-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails