|
@@ -2,6 +2,9 @@ import { forEachIn } from "@common/utils/forEachIn";
|
|
|
import Job, { JobOptions } from "@/Job";
|
|
|
import EventsModule from "@/modules/EventsModule";
|
|
|
|
|
|
+const channelRegex =
|
|
|
+ /^(?<moduleName>[a-z]+)\.(?<modelName>[A-z]+)\.(?<event>[A-z]+)\.?(?<modelId>[A-z0-9]+)?$/;
|
|
|
+
|
|
|
export default class SubscribeMany extends Job {
|
|
|
public constructor(payload?: unknown, options?: JobOptions) {
|
|
|
super(EventsModule, payload, options);
|
|
@@ -21,10 +24,9 @@ export default class SubscribeMany extends Job {
|
|
|
}
|
|
|
|
|
|
protected override async _authorize() {
|
|
|
- await forEachIn(this._payload.channels, async (channel: string) => {
|
|
|
- const [, moduleName, modelName, event, modelId] =
|
|
|
- /^([a-z]+)\.([A-z]+)\.([A-z]+)\.?([A-z0-9]+)?$/.exec(channel) ??
|
|
|
- [];
|
|
|
+ const permissions = this._payload.channels.map((channel: string) => {
|
|
|
+ const { moduleName, modelName, event, modelId } =
|
|
|
+ channelRegex.exec(channel)?.groups ?? {};
|
|
|
|
|
|
let permission = `event.${channel}`;
|
|
|
|
|
@@ -38,8 +40,10 @@ export default class SubscribeMany extends Job {
|
|
|
else permission = `data.${modelName}.findById.${modelId}`;
|
|
|
}
|
|
|
|
|
|
- await this._context.assertPermission(permission);
|
|
|
+ return permission;
|
|
|
});
|
|
|
+
|
|
|
+ await this._context.assertPermissions(permissions);
|
|
|
}
|
|
|
|
|
|
protected async _execute() {
|