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



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

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



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

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

Instance Method Details

#active_permissionsObject



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/models/dscf/core/user.rb', line 45

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



59
60
61
62
63
64
65
66
# File 'app/models/dscf/core/user.rb', line 59

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



68
69
70
71
# File 'app/models/dscf/core/user.rb', line 68

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

#has_all_permissions?(*permission_codes) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'app/models/dscf/core/user.rb', line 32

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

#has_any_permission?(*permission_codes) ⇒ Boolean

Returns:

  • (Boolean)


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

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)


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

def has_permission?(permission_code)
  return true if super_admin?

  active_permissions.include?(permission_code.to_s)
end

#has_role?(role_code) ⇒ Boolean

rubocop:disable Naming/PredicateName

Returns:

  • (Boolean)


20
21
22
# File 'app/models/dscf/core/user.rb', line 20

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

#super_admin?Boolean

rubocop:enable Naming/PredicateName

Returns:

  • (Boolean)


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

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