@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
51 lines (49 loc) • 1.72 kB
JavaScript
/**
* 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