All Downloads are FREE. Search and download functionalities are using the official Maven repository.

core.auth.Provider.ts Maven / Gradle / Ivy

There is a newer version: 7.28.3
Show newest version
import { intersection, isEmpty } from 'lodash'

import { SecurityConfig, UserConfig } from './types'

export interface AuthProvider<
    TLogin extends object = object,
> {
    init(user: UserConfig): UserConfig | Promise
    login(config: TLogin): UserConfig | Promise
    logout(): UserConfig | Promise
    check(config: SecurityConfig, user: UserConfig): boolean | Promise
}

export const defaultProvider: AuthProvider<{ user: UserConfig }> = {
    init(user) { return user },

    login(config) { return config.user },

    logout() { return {} },

    check(config, user) {
        if (config.denied) { return false }
        if (config.permitAll) { return true }
        if (config.anonymous) { return !user || isEmpty(user.username) }
        if (!isEmpty(config.permissions) && isEmpty(user.permissions)) { return false }
        if (!isEmpty(user.username)) {
            if (config.authenticated) { return true }

            return !isEmpty(intersection(config.roles, user.roles)) ||
                !isEmpty(intersection(config.permissions, user.permissions)) ||
                !isEmpty(intersection(config.usernames, [user.username]))
        }

        return false
    },
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy