UNPKG

@n4it/crud-policy

Version:

NestJs CRUD for RESTful APIs - policy

39 lines 2.19 kB
"use strict"; 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