UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

77 lines (73 loc) 2.91 kB
'use strict'; require('../../enum/class/authorization/cache-mode.enum.js'); require('../../enum/class/authorization/decision-type.enum.js'); require('../../enum/class/authorization/effect.enum.js'); require('../../enum/class/authorization/mode.enum.js'); require('../../enum/class/authorization/permission-match.enum.js'); require('../../enum/class/authorization/policy/attachment-type.enum.js'); require('../../enum/class/authorization/policy/on-type.enum.js'); require('../../enum/class/authorization/policy/source-type.enum.js'); require('../../enum/class/authorization/policy/status.enum.js'); var principalType_enum = require('../../enum/class/authorization/principal-type.enum.js'); /** * Resolves a principal from request.user with smart fallbacks. * @param {unknown} user - Request user payload. * @returns {IApiAuthorizationPrincipal} Normalized authorization principal. */ function AuthorizationResolveDefaultPrincipal(user) { const basePrincipal = { attributes: {}, groups: [], id: "anonymous", roles: [], type: principalType_enum.EApiAuthorizationPrincipalType.USER, }; if (!user || typeof user !== "object") { return basePrincipal; } const record = user; const idFields = ["id", "uuid", "email"]; for (const field of idFields) { const value = record[field]; if (typeof value === "string" && value.length > 0) { basePrincipal.id = value; break; } } basePrincipal.roles = resolveStringArray(record, ["roles", "role"]); basePrincipal.groups = resolveStringArray(record, ["groups", "group"]); basePrincipal.claims = resolveRecord(record.claims); basePrincipal.attributes = record; return basePrincipal; } /** * Returns a plain object record when the value is a non-array object. * @param {unknown} value - Candidate claims object. * @returns {Record<string, unknown> | undefined} Normalized record value. */ function resolveRecord(value) { if (!value || typeof value !== "object" || Array.isArray(value)) { return undefined; } return value; } /** * Resolves a string array from either a scalar or array field. * @param {Record<string, unknown>} record - Source record containing potential string values. * @param {Array<string>} fields - Candidate field names checked in order. * @returns {Array<string>} Normalized string array. */ function resolveStringArray(record, fields) { for (const field of fields) { const value = record[field]; if (typeof value === "string") { return [value]; } if (Array.isArray(value)) { return value.filter((item) => typeof item === "string"); } } return []; } exports.AuthorizationResolveDefaultPrincipal = AuthorizationResolveDefaultPrincipal; //# sourceMappingURL=resolve-default-principal.utility.js.map