lakutata
Version:
An IoC-based universal application framework.
241 lines (158 loc) • 7.06 kB
JavaScript
/* Build Date: Mon Jan 05 2026 23:52:23 GMT+0800 (China Standard Time) */
;
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;