@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
75 lines (72 loc) • 2.83 kB
JavaScript
import '../../enum/class/authorization/cache-mode.enum.js';
import '../../enum/class/authorization/decision-type.enum.js';
import '../../enum/class/authorization/effect.enum.js';
import '../../enum/class/authorization/mode.enum.js';
import '../../enum/class/authorization/permission-match.enum.js';
import '../../enum/class/authorization/policy/attachment-type.enum.js';
import '../../enum/class/authorization/policy/on-type.enum.js';
import '../../enum/class/authorization/policy/source-type.enum.js';
import '../../enum/class/authorization/policy/status.enum.js';
import { EApiAuthorizationPrincipalType } from '../../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: 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 [];
}
export { AuthorizationResolveDefaultPrincipal };
//# sourceMappingURL=resolve-default-principal.utility.js.map