12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import DataModule from "@/modules/DataModule";
- import DataModuleJob from "@/modules/DataModule/DataModuleJob";
- import isDj from "@/modules/DataModule/permissions/isDj";
- import isOwner from "@/modules/DataModule/permissions/isOwner";
- import isPublic from "@/modules/DataModule/permissions/isPublic";
- import { Models } from "@/types/Models";
- export default class Index extends DataModuleJob {
- protected static _modelName: keyof Models = "stations";
- protected static _hasPermission = true;
- protected override async _validate() {
- if (
- typeof this._payload !== "object" &&
- typeof this._payload !== "undefined" &&
- this._payload !== null
- )
- throw new Error("Payload must be an object or undefined");
- if (
- typeof this._payload?.adminFilter !== "boolean" &&
- typeof this._payload?.adminFilter !== "undefined" &&
- this._payload?.adminFilter !== null
- )
- throw new Error("Admin filter must be a boolean or undefined");
- }
- protected override async _authorize() {}
- protected async _execute(payload?: { adminFilter?: boolean }) {
- const model = await DataModule.getModel(this.getModelName());
- const data = await model.find();
- const user = await this._context.getUser().catch(() => null);
- const stations = [];
- for (const station of data) {
- if (
- isPublic(station) ||
- (user && (isOwner(station, user) || isDj(station, user))) ||
- (payload?.adminFilter &&
- (await this._context
- .assertPermission("data.stations.index-adminFilter")
- .then(() => true)
- .catch(() => false)))
- )
- stations.push(station);
- }
- return stations;
- }
- }
|