@n4it/crud-policy
Version:
NestJs CRUD for RESTful APIs - policy
39 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CrudGuard = exports.ApplyCrudPolicies = exports.createDefaultPolicies = exports.Policies = void 0;
const common_1 = require("@nestjs/common");
const constants_1 = require("../constants");
const utils_1 = require("../guards/utils");
const crud_1 = require("@n4it/crud");
const Policies = (...policies) => (0, common_1.SetMetadata)(constants_1.POLICY_NAME_METADATA, policies);
exports.Policies = Policies;
const createDefaultPolicies = (opts) => ({
createOneBase: [{ name: opts.policyName, action: constants_1.PolicyActions.Write }],
updateOneBase: [{ name: opts.policyName, action: constants_1.PolicyActions.Write }],
replaceOneBase: [{ name: opts.policyName, action: constants_1.PolicyActions.Manage }],
deleteOneBase: [{ name: opts.policyName, action: constants_1.PolicyActions.Manage }],
getOneBase: [{ name: opts.policyName, action: constants_1.PolicyActions.Read }],
createManyBase: [{ name: opts.policyName, action: constants_1.PolicyActions.Write }],
getManyBase: [{ name: opts.policyName, action: constants_1.PolicyActions.Read }],
recoverOneBase: [{ name: opts.policyName, action: constants_1.PolicyActions.Manage }],
});
exports.createDefaultPolicies = createDefaultPolicies;
const ApplyCrudPolicies = (opts) => (target) => {
const methods = Object.getOwnPropertyNames(target.prototype);
const defaultPolicies = (0, exports.createDefaultPolicies)(opts);
const routes = { ...defaultPolicies, ...opts.routes };
methods.forEach((methodName) => {
const policies = routes[methodName];
if (!['constructor'].includes(methodName) &&
Object.values(crud_1.BaseRouteName).includes(methodName) &&
Array.isArray(policies)) {
(0, exports.Policies)(...policies)(target.prototype[methodName]);
}
});
};
exports.ApplyCrudPolicies = ApplyCrudPolicies;
const CrudGuard = (opts) => (target) => {
(0, common_1.applyDecorators)((0, exports.ApplyCrudPolicies)(opts), (0, common_1.UseGuards)((0, utils_1.createPolicyGuard)(opts)))(target);
};
exports.CrudGuard = CrudGuard;
//# sourceMappingURL=index.js.map