Sha256: 68ebaf27ad6df421f5232bddeef05f6302ea78b9574b9ddb084aa137b45974fb

Contents?: true

Size: 1.6 KB

Versions: 3

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

module Mks
  module Auth
    # A model class to represent users of the system
    class User < ApplicationRecord
      has_and_belongs_to_many :application_modules,
                              class_name: 'Mks::Auth::ApplicationModule',
                              join_table: 'mks_auth_users_application_modules'
      has_and_belongs_to_many :roles, class_name: 'Mks::Auth::UserRole',
                                      join_table: 'mks_auth_users_user_roles'
      has_secure_password

      before_save { email.downcase! }

      VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
      validates :first_name, presence: true, length: { maximum: 30 }
      validates :last_name, presence: true, length: { maximum: 30 }
      validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
      validates :password, length: { minimum: 6 }
      validates :active, presence: true

      def full_name
        "#{first_name} #{last_name}"
      end

      def role_names
        roles.map(&:name)
      end

      def to_token_payload
        { id: id, email: email, name: full_name, roles: role_names }
      end

      def has_module(code)
        app_module = ApplicationModule.find_by(code: code)
        roles = self.roles.select { |ur| ur.application_module == app_module }
        roles.count.positive?
      end

      def role?(role)
        roles.any? { |r| r.name.underscore.to_sym == role }
      end

      def any_role?(role_list)
        roles.any? { |r| role_list.include?(r.name.underscore.to_sym) }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mks_auth-1.0.13 app/models/mks/auth/user.rb
mks_auth-1.0.12 app/models/mks/auth/user.rb
mks_auth-1.0.11 app/models/mks/auth/user.rb