Class: Vert::Authorization::PermissionResolver
- Inherits:
-
Object
- Object
- Vert::Authorization::PermissionResolver
- Defined in:
- lib/vert/authorization/permission_resolver.rb
Constant Summary collapse
- CACHE_TTL =
5.minutes
- CACHE_PREFIX =
"vert:permissions"
Class Method Summary collapse
- .get_allowed_fields(user, permission_code, context = {}) ⇒ Object
- .get_condition(user, permission_code, condition_key, context = {}) ⇒ Object
- .get_denied_fields(user, permission_code, context = {}) ⇒ Object
- .has_permission?(user, permission_code, context = {}) ⇒ Boolean
- .invalidate_role_cache(role_id) ⇒ Object
- .invalidate_user_cache(user_id) ⇒ Object
- .user_permissions(user, context = {}) ⇒ Object
Class Method Details
.get_allowed_fields(user, permission_code, context = {}) ⇒ Object
28 29 30 31 32 |
# File 'lib/vert/authorization/permission_resolver.rb', line 28 def get_allowed_fields(user, , context = {}) return nil if super_admin?(user) fields = get_field_restrictions(user, , context) fields&.dig("granted_fields") end |
.get_condition(user, permission_code, condition_key, context = {}) ⇒ Object
22 23 24 25 26 |
# File 'lib/vert/authorization/permission_resolver.rb', line 22 def get_condition(user, , condition_key, context = {}) return nil unless user conditions = (user, , context) conditions&.dig(condition_key.to_s) end |
.get_denied_fields(user, permission_code, context = {}) ⇒ Object
34 35 36 37 38 |
# File 'lib/vert/authorization/permission_resolver.rb', line 34 def get_denied_fields(user, , context = {}) return [] if super_admin?(user) fields = get_field_restrictions(user, , context) fields&.dig("denied_fields") || [] end |
.has_permission?(user, permission_code, context = {}) ⇒ Boolean
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/vert/authorization/permission_resolver.rb', line 10 def (user, , context = {}) return false unless user return true if super_admin?(user) cached = (user, , context) return cached unless cached.nil? result = (user, , context) (user, , context, result) result end |
.invalidate_role_cache(role_id) ⇒ Object
61 62 63 64 65 |
# File 'lib/vert/authorization/permission_resolver.rb', line 61 def invalidate_role_cache(role_id) if defined?(UserRole) UserRole.where(role_id: role_id).pluck(:user_id).each { |user_id| invalidate_user_cache(user_id) } end end |
.invalidate_user_cache(user_id) ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/vert/authorization/permission_resolver.rb', line 53 def invalidate_user_cache(user_id) return if user_id.blank? # Sanitize to avoid Redis KEYS pattern injection (e.g. * or ? in user_id) safe_id = user_id.to_s.gsub(%r{[*?\[\]\{\}\\]}, "") pattern = "#{CACHE_PREFIX}:#{safe_id}:*" redis_delete_pattern(pattern) end |
.user_permissions(user, context = {}) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/vert/authorization/permission_resolver.rb', line 40 def (user, context = {}) return [] unless user return ["*"] if super_admin?(user) cache_key = (user, context) cached = redis_get(cache_key) return cached if cached = (user, context) redis_set(cache_key, , CACHE_TTL) end |