UNPKG

@elsikora/nestjs-crud-automator

Version:

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

51 lines (49 loc) 1.72 kB
/** * Resolves a subject from request.user with smart fallbacks. * @param {unknown} user - Request user payload. * @returns {IApiAuthorizationSubject} Normalized authorization subject. */ function AuthorizationResolveDefaultSubject(user) { const baseSubject = { attributes: {}, id: "anonymous", permissions: [], roles: [], }; if (!user || typeof user !== "object") { return baseSubject; } const record = user; const idFields = ["id", "uuid", "email"]; for (const field of idFields) { const value = record[field]; if (typeof value === "string" && value.length > 0) { baseSubject.id = value; break; } } baseSubject.roles = resolveStringArray(record, ["roles", "role"]); baseSubject.permissions = resolveStringArray(record, ["permissions", "permission"]); baseSubject.attributes = record; return baseSubject; } /** * Resolves the first string array found in the provided record for the given field candidates. * @param {Record<string, unknown>} record - Object containing candidate fields. * @param {Array<string>} fields - Candidate field names to inspect in order. * @returns {Array<string>} Normalized array of string values. */ 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 { AuthorizationResolveDefaultSubject }; //# sourceMappingURL=resolve-default-subject.utility.js.map