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