Index.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import DataModule from "@/modules/DataModule";
  2. import DataModuleJob from "@/modules/DataModule/DataModuleJob";
  3. import isDj from "@/modules/DataModule/permissions/isDj";
  4. import isOwner from "@/modules/DataModule/permissions/isOwner";
  5. import isPublic from "@/modules/DataModule/permissions/isPublic";
  6. import { Models } from "@/types/Models";
  7. export default class Index extends DataModuleJob {
  8. protected static _modelName: keyof Models = "stations";
  9. protected static _hasPermission = true;
  10. protected override async _validate() {
  11. if (
  12. typeof this._payload !== "object" &&
  13. typeof this._payload !== "undefined" &&
  14. this._payload !== null
  15. )
  16. throw new Error("Payload must be an object or undefined");
  17. if (
  18. typeof this._payload?.adminFilter !== "boolean" &&
  19. typeof this._payload?.adminFilter !== "undefined" &&
  20. this._payload?.adminFilter !== null
  21. )
  22. throw new Error("Admin filter must be a boolean or undefined");
  23. }
  24. protected override async _authorize() {}
  25. protected async _execute(payload?: { adminFilter?: boolean }) {
  26. const model = await DataModule.getModel(this.getModelName());
  27. const data = await model.find();
  28. const user = await this._context.getUser().catch(() => null);
  29. const stations = [];
  30. for (const station of data) {
  31. if (
  32. isPublic(station) ||
  33. (user && (isOwner(station, user) || isDj(station, user))) ||
  34. (payload?.adminFilter &&
  35. (await this._context
  36. .assertPermission("data.stations.index-adminFilter")
  37. .then(() => true)
  38. .catch(() => false)))
  39. )
  40. stations.push(station);
  41. }
  42. return stations;
  43. }
  44. }