UNPKG

lakutata

Version:

An IoC-based universal application framework.

241 lines (158 loc) 7.06 kB
/* Build Date: Mon Jan 05 2026 23:52:23 GMT+0800 (China Standard Time) */ "use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const e = require("../../../../vendor/Package.internal.3.cjs"); const r = require("../../../../vendor/Package.internal.4.cjs"); const t = require("../../../decorators/di/Configurable.cjs"); const i = require("../exceptions/AccessDenyException.cjs"); const s = require("./AccessControlRule.cjs"); const c = require("../../../../vendor/Package.internal.7.cjs"); const o = require("../../../lib/helpers/As.cjs"); require("../../../lib/base/async-constructor/AsyncConstructor.cjs"); require("../../../lib/base/async-constructor/Append.cjs"); require("../../../lib/helpers/IsPromiseLike.cjs"); require("../../../lib/helpers/IsPromise.cjs"); require("util/types"); require("../../../decorators/di/Lifetime.cjs"); require("../../../lib/base/internal/ObjectLifetime.cjs"); require("../../../constants/DIMetadataKey.cjs"); require("../../../../vendor/Package.internal.1.cjs"); require("../../../../vendor/Package.internal.2.cjs"); require("../../../exceptions/di/LifetimeLockedException.cjs"); require("../../../lib/base/abstracts/Exception.cjs"); require("../../../../vendor/Package.internal.5.cjs"); require("../../../../vendor/Package.internal.6.cjs"); require("../../../lib/base/internal/ThrowWarning.cjs"); require("../../../lib/helpers/Templating.cjs"); require("../../../lib/base/internal/CamelCase.cjs"); require("../../../lib/helpers/NoCase.cjs"); require("../../../lib/helpers/DevNull.cjs"); require("../../../exceptions/MethodNotFoundException.cjs"); require("../../../lib/ioc/DependencyInjectionContainer.cjs"); require("util"); require("../../../lib/ioc/Errors.cjs"); require("../../../exceptions/di/DependencyInjectionException.cjs"); require("../../../lib/base/internal/ConstructorSymbol.cjs"); require("node:crypto"); require("../../../lib/base/internal/DataValidator.cjs"); require("node:util/types"); require("../../../lib/validation/VLD.cjs"); require("url"); require("../../../exceptions/dto/InvalidValueException.cjs"); require("../../../../vendor/Package.internal.8.cjs"); require("../../../lib/helpers/IsHtml.cjs"); require("../../../lib/helpers/IsXML.cjs"); require("../../../constants/DTOMetadataKey.cjs"); require("../../../lib/helpers/ObjectConstructor.cjs"); require("../../../lib/helpers/ObjectParentConstructors.cjs"); require("../../../lib/helpers/ObjectParentConstructor.cjs"); require("../../../lib/helpers/ObjectPrototype.cjs"); require("../../../lib/ioc/InjectionMode.cjs"); require("../../../lib/ioc/Lifetime.cjs"); require("../../../lib/ioc/ListModules.cjs"); require("os"); require("path"); require("stream"); require("events"); require("fs"); require("../../../lib/ioc/Utils.cjs"); require("../../../lib/ioc/FunctionTokenizer.cjs"); require("../../../lib/ioc/LoadModules.cjs"); require("../../../lib/ioc/Resolvers.cjs"); require("../../../lib/ioc/ParamParser.cjs"); require("../../../lib/base/internal/ObjectWeakRefs.cjs"); require("../../../lib/base/internal/ConfigurableRecordsInjection.cjs"); require("../../../lib/base/internal/ObjectConfiguration.cjs"); require("../../../lib/base/internal/ObjectInjection.cjs"); require("../../../lib/base/internal/ObjectContainer.cjs"); require("../../../decorators/dto/Expect.cjs"); require("../../../decorators/dto/IndexSignature.cjs"); require("../../../decorators/dto/Accept.cjs"); require("../../../lib/base/internal/MethodValidation.cjs"); require("../../../exceptions/dto/InvalidMethodAcceptException.cjs"); require("../../../exceptions/dto/InvalidMethodReturnException.cjs"); require("../../../lib/helpers/IsEmptyObject.cjs"); class AccessControl extends r.BaseObject { constructor() { super(...arguments); this.accessControlRuleConstructorDTO = c.DTO.Class(s.AccessControlRule); } async init() { try { const e = await this.match(); if (e) return this.allowCallback(); return this.denyCallback(); } catch (e) { return this.denyCallback(e); } } async match() { for (const e of this.rules) { if (c.DTO.isValid(e, this.accessControlRuleConstructorDTO)) { const r = o.As(e); const t = await this.runtimeContainer.build(r, { actions: this.actions, targetAction: this.target, context: this.context, input: this.input }); if (!t.supportContextTypes.includes(this.context.type)) continue; if (!await t.rule()) return false; } else { const r = o.As(e); if (!await r(this.context, this.input)) return false; } } return true; } static async run(e, r, t, s, c, o) { const n = o(t.type); let a = !c.acl; let l = new i.AccessDenyException; if (!a) { await r.set(this, { rules: [ ...e, c.rule ].filter(e => !!e), runtimeContainer: r, actions: n, context: t, input: s, target: c.getActionInfo(), allowCallback: () => { a = true; }, denyCallback: e => { a = false; l = e ? e : l; } }); } else if (c.rule) { await r.set(this, { rules: [ c.rule ], runtimeContainer: r, actions: n, context: t, input: s, target: c.getActionInfo(), allowCallback: () => { a = true; }, denyCallback: e => { a = false; l = e ? e : l; } }); } return [ a, l ]; } } e.__decorate([ t.Configurable(), e.__metadata("design:type", r.Container) ], AccessControl.prototype, "runtimeContainer", void 0); e.__decorate([ t.Configurable(), e.__metadata("design:type", Array) ], AccessControl.prototype, "actions", void 0); e.__decorate([ t.Configurable(), e.__metadata("design:type", Object) ], AccessControl.prototype, "target", void 0); e.__decorate([ t.Configurable(), e.__metadata("design:type", Object) ], AccessControl.prototype, "context", void 0); e.__decorate([ t.Configurable(), e.__metadata("design:type", Object) ], AccessControl.prototype, "input", void 0); e.__decorate([ t.Configurable(), e.__metadata("design:type", Function) ], AccessControl.prototype, "allowCallback", void 0); e.__decorate([ t.Configurable(), e.__metadata("design:type", Function) ], AccessControl.prototype, "denyCallback", void 0); e.__decorate([ t.Configurable(), e.__metadata("design:type", Array) ], AccessControl.prototype, "rules", void 0); exports.AccessControl = AccessControl;