Class: Dscf::Core::User

Inherits:
ApplicationRecord show all
Includes:
UserAuthenticatable
Defined in:
app/models/dscf/core/user.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from UserAuthenticatable

#active?, #authenticate_with_password, #generate_auth_tokens, #locked?, #revoke_all_tokens, #track_device, #valid_for_authentication?

Class Method Details

.ransackable_associations(_auth_object = nil) ⇒ Object



80
81
82
# File 'app/models/dscf/core/user.rb', line 80

def self.ransackable_associations(_auth_object = nil)
  %w[refresh_tokens user_roles roles businesses addresses documents user_profile]
end

.ransackable_attributes(_auth_object = nil) ⇒ Object



76
77
78
# File 'app/models/dscf/core/user.rb', line 76

def self.ransackable_attributes(_auth_object = nil)
  %w[id email phone status suspended_at suspension_reason verified_at created_at updated_at]
end

Instance Method Details

#active_permissionsObject



48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/models/dscf/core/user.rb', line 48

def active_permissions
  @active_permissions ||= Set.new(
    Permission
      .joins(role_permissions: {role: :user_roles})
      .where(
        dscf_core_user_roles: {user_id: id},
        dscf_core_roles: {active: true},
        dscf_core_permissions: {active: true}
      )
      .where("dscf_core_user_roles.expires_at IS NULL OR dscf_core_user_roles.expires_at > ?", Time.current)
      .pluck("dscf_core_permissions.code")
  )
end

#active_role_codesObject



62
63
64
65
66
67
68
69
# File 'app/models/dscf/core/user.rb', line 62

def active_role_codes
  @active_role_codes ||= roles
                         .where(active: true)
                         .joins(:user_roles)
                         .where(dscf_core_user_roles: {user_id: id})
                         .where("dscf_core_user_roles.expires_at IS NULL OR dscf_core_user_roles.expires_at > ?", Time.current)
                         .pluck("dscf_core_roles.code")
end

#clear_permission_cache!Object



71
72
73
74
# File 'app/models/dscf/core/user.rb', line 71

def clear_permission_cache!
  @active_permissions = nil
  @active_role_codes = nil
end

#has_all_permissions?(*permission_codes) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
# File 'app/models/dscf/core/user.rb', line 36

def has_all_permissions?(*permission_codes)
  permission_codes.flatten.all? { |code| has_permission?(code) }
end

#has_any_permission?(*permission_codes) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'app/models/dscf/core/user.rb', line 40

def has_any_permission?(*permission_codes)
  permission_codes.flatten.any? { |code| has_permission?(code) }
end

#has_permission?(permission_code) ⇒ Boolean Also known as: can?

Returns:

  • (Boolean)


28
29
30
31
32
# File 'app/models/dscf/core/user.rb', line 28

def has_permission?(permission_code)
  return true if super_admin?

  active_permissions.include?(permission_code.to_s)
end

#has_role?(role_code) ⇒ Boolean

— RBAC Helper Methods —

Returns:

  • (Boolean)


24
25
26
# File 'app/models/dscf/core/user.rb', line 24

def has_role?(role_code)
  active_role_codes.include?(role_code.to_s.upcase)
end

#super_admin?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'app/models/dscf/core/user.rb', line 44

def super_admin?
  active_role_codes.include?("SUPER_ADMIN")
end