diff --git a/src/command/club/member/communicationCommandHandler.ts b/src/command/club/member/communicationCommandHandler.ts index 2890485..3899394 100644 --- a/src/command/club/member/communicationCommandHandler.ts +++ b/src/command/club/member/communicationCommandHandler.ts @@ -18,17 +18,6 @@ export default abstract class CommunicationCommandHandler { let insertId = -1; return await dataSource .transaction(async (manager) => { - if (createCommunication.isSendNewsletter) { - await manager - .createQueryBuilder() - .update(communication) - .set({ - isSendNewsletter: false, - }) - .where("memberId = :memberId", { memberId: createCommunication.memberId }) - .execute(); - } - await manager .createQueryBuilder() .insert() @@ -51,6 +40,16 @@ export default abstract class CommunicationCommandHandler { .then((result) => { insertId = result.identifiers[0].id; }); + + await manager + .createQueryBuilder() + .update(communication) + .set({ + isSendNewsletter: false, + }) + .where("memberId = :memberId", { memberId: createCommunication.memberId }) + .andWhere("id <> :id", { id: insertId }) + .execute(); }) .then(() => { return insertId; @@ -68,17 +67,6 @@ export default abstract class CommunicationCommandHandler { static async update(updateCommunication: UpdateCommunicationCommand): Promise { return await dataSource .transaction(async (manager) => { - if (updateCommunication.isSendNewsletter) { - await manager - .createQueryBuilder() - .update(communication) - .set({ - isSendNewsletter: false, - }) - .where("memberId = :memberId", { memberId: updateCommunication.memberId }) - .execute(); - } - await manager .createQueryBuilder() .update(communication) @@ -97,6 +85,16 @@ export default abstract class CommunicationCommandHandler { .where("id = :id", { id: updateCommunication.id }) .andWhere("memberId = :memberId", { memberId: updateCommunication.memberId }) .execute(); + + await manager + .createQueryBuilder() + .update(communication) + .set({ + isSendNewsletter: false, + }) + .where("memberId = :memberId", { memberId: updateCommunication.memberId }) + .andWhere("id <> :id", { id: updateCommunication.id }) + .execute(); }) .then(() => {}) .catch((err) => { diff --git a/src/controller/admin/club/newsletterController.ts b/src/controller/admin/club/newsletterController.ts index 5399336..294b6e3 100644 --- a/src/controller/admin/club/newsletterController.ts +++ b/src/controller/admin/club/newsletterController.ts @@ -94,7 +94,7 @@ export async function getNewsletterPrintoutsById(req: Request, res: Response): P let newsletter = await NewsletterService.getById(newsletterId); let filesInFolder = FileSystemHelper.getFilesInDirectory( - `newsletter/${newsletter.id}_${newsletter.title.replaceAll(" ", "")}` + `newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}` ); res.json(filesInFolder); @@ -114,7 +114,7 @@ export async function getNewsletterPrintoutByIdAndPrint(req: Request, res: Respo let filepath = FileSystemHelper.formatPath( "newsletter", - `${newsletter.id}_${newsletter.title.replaceAll(" ", "")}`, + `${newsletter.id}_${newsletter.title.replace(" ", "")}`, filename ); @@ -164,34 +164,6 @@ export async function createNewsletterPrintoutPreviewById(req: Request, res: Res res.send(pdfbuffer); } -/** - * @description get all members receiving a newsletter printout by id - * @param req {Request} Express req object - * @param res {Response} Express res object - * @returns {Promise<*>} - */ -export async function getNewsletterPrintReceiversById(req: Request, res: Response): Promise { - let newsletterId = parseInt(req.params.newsletterId); - - let recipients = await NewsletterHelper.getPrintRecipients(newsletterId); - - res.json(recipients); -} - -/** - * @description get all members receiving a newsletter mail by id - * @param req {Request} Express req object - * @param res {Response} Express res object - * @returns {Promise<*>} - */ -export async function getNewsletterMailReceiversById(req: Request, res: Response): Promise { - let newsletterId = parseInt(req.params.newsletterId); - - let recipients = await NewsletterHelper.getMailRecipients(newsletterId); - - res.json(recipients); -} - /** * @description create newsletter * @param req {Request} Express req object diff --git a/src/controller/admin/club/protocolController.ts b/src/controller/admin/club/protocolController.ts index 98396c8..ecae059 100644 --- a/src/controller/admin/club/protocolController.ts +++ b/src/controller/admin/club/protocolController.ts @@ -235,7 +235,7 @@ export async function createProtocolPrintoutById(req: Request, res: Response): P year: "numeric", })}`; - let filename = `${new Date().toISOString().split("T")[0]}_${iteration + 1}_Protokoll_${protocol.title.replaceAll( + let filename = `${new Date().toISOString().split("T")[0]}_${iteration + 1}_Protokoll_${protocol.title.replace( /[^a-zA-Z0-9]/g, "" )}`; diff --git a/src/helpers/jwtHelper.ts b/src/helpers/jwtHelper.ts index 5708ab8..c16f2a2 100644 --- a/src/helpers/jwtHelper.ts +++ b/src/helpers/jwtHelper.ts @@ -58,10 +58,7 @@ export abstract class JWTHelper { let rolePermissions = userRoles.length != 0 ? await RolePermissionService.getByRoles(userRoles.map((e) => e.id)) : []; let rolePermissionStrings = rolePermissions.map((e) => e.permission); - let permissionObject = PermissionHelper.convertToObject( - [...userPermissionStrings, ...rolePermissionStrings], - isOwner - ); + let permissionObject = PermissionHelper.convertToObject([...userPermissionStrings, ...rolePermissionStrings]); let jwtData: JWTToken = { userId: id, diff --git a/src/helpers/newsletterHelper.ts b/src/helpers/newsletterHelper.ts index e84427f..5726dbd 100644 --- a/src/helpers/newsletterHelper.ts +++ b/src/helpers/newsletterHelper.ts @@ -1,3 +1,4 @@ +import Mail from "nodemailer/lib/mailer"; import { member } from "../entity/club/member/member"; import { newsletter } from "../entity/club/newsletter/newsletter"; import { newsletterDates } from "../entity/club/newsletter/newsletterDates"; @@ -61,41 +62,39 @@ export abstract class NewsletterHelper { newsletterTitle: newsletter.newsletterTitle, newsletterText: newsletter.newsletterText, newsletterSignatur: newsletter.newsletterSignatur, - dates: dates - .map((d) => ({ - title: d.diffTitle || d.calendar.title, - content: d.diffDescription || d.calendar.content, - starttime: d.calendar.starttime, - formattedStarttime: new Date(d.calendar.starttime).toLocaleDateString("de-DE", { - weekday: "long", - day: "2-digit", - month: "long", - }), - formattedFullStarttime: new Date(d.calendar.starttime).toLocaleDateString("de-DE", { - weekday: "long", - day: "2-digit", - month: "long", - year: "numeric", - hour: "2-digit", - minute: "2-digit", - }), - endtime: d.calendar.endtime, - formattedEndtime: new Date(d.calendar.endtime).toLocaleDateString("de-DE", { - weekday: "long", - day: "2-digit", - month: "long", - }), - formattedFullEndtime: new Date(d.calendar.endtime).toLocaleDateString("de-DE", { - weekday: "long", - day: "2-digit", - month: "long", - year: "numeric", - hour: "2-digit", - minute: "2-digit", - }), - location: d.calendar.location, - })) - .sort((a, b) => a.starttime.getTime() - b.starttime.getTime()), + dates: dates.map((d) => ({ + title: d.diffTitle || d.calendar.title, + content: d.diffDescription || d.calendar.content, + starttime: d.calendar.starttime, + formattedStarttime: new Date(d.calendar.starttime).toLocaleDateString("de-DE", { + weekday: "long", + day: "2-digit", + month: "long", + }), + formattedFullStarttime: new Date(d.calendar.starttime).toLocaleDateString("de-DE", { + weekday: "long", + day: "2-digit", + month: "long", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + }), + endtime: d.calendar.endtime, + formattedEndtime: new Date(d.calendar.endtime).toLocaleDateString("de-DE", { + weekday: "long", + day: "2-digit", + month: "long", + }), + formattedFullEndtime: new Date(d.calendar.endtime).toLocaleDateString("de-DE", { + weekday: "long", + day: "2-digit", + month: "long", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + }), + location: d.calendar.location, + })), ...(recipient ? { recipient: { @@ -141,19 +140,33 @@ export abstract class NewsletterHelper { } } - if (queryMemberIds.length == 0) { - return []; - } else { - let members = await MemberService.getAll({ noLimit: true, ids: queryMemberIds }); - return members[0]; - } + let members = await MemberService.getAll({ noLimit: true, ids: queryMemberIds }); + + return members[0]; } - public static async getMailRecipients(newsletterId: number) { + public static getICSFilePath(newsletter: newsletter) { + return FileSystemHelper.formatPath( + "newsletter", + `${newsletter.id}_${newsletter.title.replace(" ", "")}`, + `events.ics` + ); + } + + public static saveIcsToFile(newsletter: newsletter, ics: string) { + FileSystemHelper.writeFile(`newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}`, "events.ics", ics); + } + + public static async sendMails(newsletterId: number) { let newsletter = await NewsletterService.getById(newsletterId); + let dates = await NewsletterDatesService.getAll(newsletterId); let recipients = await NewsletterRecipientsService.getAll(newsletterId); let config = await NewsletterConfigService.getAll(); + const { value, error } = CalendarHelper.buildICS(dates.map((r) => r.calendar)); + if (error) throw new InternalException("Failed Building ICS form Mail", error); + this.saveIcsToFile(newsletter, value); + let allowedForMail = config.filter((c) => c.config == NewsletterConfigType.mail).map((c) => c.comTypeId); const members = await this.transformRecipientsToMembers(newsletter, recipients); @@ -164,58 +177,6 @@ export abstract class NewsletterHelper { allowedForMail.includes(m.sendNewsletter?.type?.id) ); - return mailRecipients; - } - - public static async getPrintRecipients(newsletterId: number) { - let newsletter = await NewsletterService.getById(newsletterId); - let recipients = await NewsletterRecipientsService.getAll(newsletterId); - let config = await NewsletterConfigService.getAll(); - - let notAllowedForPdf = config.filter((c) => c.config == NewsletterConfigType.mail).map((c) => c.comTypeId); - - const members = await this.transformRecipientsToMembers(newsletter, recipients); - const pdfRecipients = members.filter( - (m) => !notAllowedForPdf.includes(m.sendNewsletter?.type?.id) || m.sendNewsletter == null - ); - - pdfRecipients.unshift({ - id: "0", - firstname: "Alle Mitglieder", - lastname: CLUB_NAME, - nameaffix: "", - salutation: { salutation: "" }, - } as member); - - return pdfRecipients; - } - - public static getICSFilePath(newsletter: newsletter) { - return FileSystemHelper.formatPath( - "newsletter", - `${newsletter.id}_${newsletter.title.replaceAll(" ", "")}`, - `events.ics` - ); - } - - public static saveIcsToFile(newsletter: newsletter, ics: string) { - FileSystemHelper.writeFile( - `newsletter/${newsletter.id}_${newsletter.title.replaceAll(" ", "")}`, - "events.ics", - ics - ); - } - - public static async sendMails(newsletterId: number) { - let newsletter = await NewsletterService.getById(newsletterId); - let dates = await NewsletterDatesService.getAll(newsletterId); - - const { value, error } = CalendarHelper.buildICS(dates.map((r) => r.calendar)); - if (error) throw new InternalException("Failed Building ICS form Mail", error); - this.saveIcsToFile(newsletter, value); - - const mailRecipients = await this.getMailRecipients(newsletterId); - this.formatJobEmit("progress", "mail", "info", newsletterId, mailRecipients.length, 0, "starting sending"); for (const [index, rec] of mailRecipients.entries()) { @@ -267,10 +228,11 @@ export abstract class NewsletterHelper { public static async printPdfs(newsletterId: number) { let newsletter = await NewsletterService.getById(newsletterId); let dates = await NewsletterDatesService.getAll(newsletterId); + let recipients = await NewsletterRecipientsService.getAll(newsletterId); let config = await NewsletterConfigService.getAll(); FileSystemHelper.clearDirectoryByFiletype( - `newsletter/${newsletter.id}_${newsletter.title.replaceAll(" ", "")}`, + `newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}`, ".pdf" ); @@ -278,20 +240,33 @@ export abstract class NewsletterHelper { if (error) throw new InternalException("Failed Building ICS form Pdf", error); this.saveIcsToFile(newsletter, value); + let notAllowedForPdf = config.filter((c) => c.config == NewsletterConfigType.mail).map((c) => c.comTypeId); let printWithAdress = config.filter((c) => c.config == NewsletterConfigType.pdf).map((c) => c.comTypeId); - const pdfRecipients = await this.getPrintRecipients(newsletterId); + const members = await this.transformRecipientsToMembers(newsletter, recipients); + const pdfRecipients = members.filter( + (m) => !notAllowedForPdf.includes(m.sendNewsletter?.type?.id) || m.sendNewsletter == null + ); - this.formatJobEmit("progress", "pdf", "info", newsletterId, pdfRecipients.length, 0, "starting printing"); + this.formatJobEmit("progress", "pdf", "info", newsletterId, pdfRecipients.length + 1, 0, "starting sending"); - for (const [index, rec] of pdfRecipients.entries()) { + for (const [index, rec] of [ + ...pdfRecipients, + { + id: "0", + firstname: "Alle Mitglieder", + lastname: CLUB_NAME, + nameaffix: "", + salutation: { salutation: "" }, + } as member, + ].entries()) { let data = this.buildData(newsletter, dates, rec, printWithAdress.includes(rec.sendNewsletter?.type?.id)); await PdfExport.renderFile({ template: "newsletter", title: `Newsletter von ${CLUB_NAME}`, - filename: `${rec.lastname}_${rec.firstname}_${rec.id}`.replaceAll(" ", "-"), - folder: `newsletter/${newsletter.id}_${newsletter.title.replaceAll(" ", "")}`, + filename: `${rec.lastname}_${rec.firstname}_${rec.id}`, + folder: `newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}`, data: data, }) .then(() => { @@ -319,9 +294,9 @@ export abstract class NewsletterHelper { } await PdfExport.sqashToSingleFile( - `newsletter/${newsletter.id}_${newsletter.title.replaceAll(" ", "")}`, + `newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}`, "allPdfsTogether", - `newsletter/${newsletter.id}_${newsletter.title.replaceAll(" ", "")}` + `newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}` ) .then(() => { this.formatJobEmit( diff --git a/src/helpers/pdfExport.ts b/src/helpers/pdfExport.ts index 429f551..e59ba54 100644 --- a/src/helpers/pdfExport.ts +++ b/src/helpers/pdfExport.ts @@ -1,47 +1,10 @@ -import puppeteer, { Browser } from "puppeteer"; +import puppeteer from "puppeteer"; import { TemplateHelper } from "./templateHelper"; import { PermissionModule } from "../type/permissionTypes"; import { FileSystemHelper } from "./fileSystemHelper"; import { PDFDocument } from "pdf-lib"; -import { StringHelper } from "./stringHelper"; export abstract class PdfExport { - private static browserInstance: undefined | Browser = undefined; - private static timeout: undefined | NodeJS.Timeout = undefined; - private static printing = new Map(); - - private static async renderTemplate( - template: `${PermissionModule}` | `${PermissionModule}.${string}`, - title: string, - data: any, - customTemplate?: { - headerId?: number; - footerId?: number; - bodyId?: string | number; - headerHeight: number; - footerHeight: number; - } - ): Promise<{ header: string; footer: string; body: string; headerMargin?: number; footerMargin?: number }> { - if (!customTemplate) { - return await TemplateHelper.renderFileForModule({ - module: template, - headerData: data, - bodyData: data, - footerData: data, - title: title, - }); - } else { - return await TemplateHelper.renderFileForCustom({ - module: template, - customTemplate, - headerData: data, - bodyData: data, - footerData: data, - title: title, - }); - } - } - static async renderFile({ template, title = "pdf-export FF Admin", @@ -65,25 +28,33 @@ export abstract class PdfExport { footerHeight: number; }; }) { - try { - clearTimeout(this.timeout); - } catch (err) {} - let id = StringHelper.random(32); - this.printing.set(id, "printing"); - if (folder != "") FileSystemHelper.createFolder(folder); - const renderedTemplate = await this.renderTemplate(template, title, data, customTemplate); - let { header, footer, body, headerMargin, footerMargin } = renderedTemplate; - - if (!this.browserInstance || !this.browserInstance.connected) { - this.browserInstance = await puppeteer.launch({ - headless: true, - args: ["--no-sandbox", "--disable-gpu", "--disable-setuid-sandbox"], - }); + let header: string, footer: string, body: string, headerMargin: number, footerMargin: number; + if (!customTemplate) { + ({ header, footer, body, headerMargin, footerMargin } = await TemplateHelper.renderFileForModule({ + module: template, + headerData: data, + bodyData: data, + footerData: data, + title: title, + })); + } else { + ({ header, footer, body, headerMargin, footerMargin } = await TemplateHelper.renderFileForCustom({ + module: template, + customTemplate, + headerData: data, + bodyData: data, + footerData: data, + title: title, + })); } - const page = await this.browserInstance.newPage(); + const browser = await puppeteer.launch({ + headless: true, + args: ["--no-sandbox", "--disable-gpu", "--disable-setuid-sandbox"], + }); + const page = await browser.newPage(); await page.setContent(body, { waitUntil: "domcontentloaded" }); const exportPath = FileSystemHelper.formatPath(folder, `${filename}.pdf`); @@ -103,16 +74,7 @@ export abstract class PdfExport { footerTemplate: footer, }); - await page.close(); - - this.printing.delete(id); - - if (this.printing.size == 0) { - this.timeout = setTimeout(() => { - this.browserInstance.close(); - this.browserInstance = undefined; - }, 5000); - } + await browser.close(); return pdf; } diff --git a/src/helpers/permissionHelper.ts b/src/helpers/permissionHelper.ts index 6a83f92..86b27e2 100644 --- a/src/helpers/permissionHelper.ts +++ b/src/helpers/permissionHelper.ts @@ -4,11 +4,9 @@ import { permissionModules, PermissionObject, PermissionSection, - permissionSections, PermissionString, PermissionType, permissionTypes, - sectionsAndModules, } from "../type/permissionTypes"; import ForbiddenRequestException from "../exceptions/forbiddenRequestException"; @@ -19,8 +17,8 @@ export default class PermissionHelper { section: PermissionSection, module?: PermissionModule ) { - if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false; - if (permissions?.admin || permissions?.adminByOwner) return true; + if (type == "admin") return permissions?.admin ?? false; + if (permissions?.admin) return true; if ( (!module && permissions[section] != undefined && @@ -52,8 +50,8 @@ export default class PermissionHelper { type: PermissionType | "admin", section: PermissionSection ): boolean { - if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false; - if (permissions?.admin || permissions?.adminByOwner) return true; + if (type == "admin") return permissions?.admin ?? false; + if (permissions?.admin) return true; if ( permissions[section]?.all == "*" || permissions[section]?.all?.includes(type) || @@ -75,11 +73,6 @@ export default class PermissionHelper { }, false); } - static canValue(permissions: PermissionObject, key: string, emptyIfAdmin: boolean = false): string { - if (emptyIfAdmin && (permissions.admin || permissions.adminByOwner)) return ""; - return permissions?.additional?.[key] ?? ""; - } - static passCheckMiddleware( requiredPermissions: PermissionType | "admin", section: PermissionSection, @@ -166,28 +159,14 @@ export default class PermissionHelper { }; } - static convertToObject(permissions: Array, isOwner: boolean = false): PermissionObject { - let isAdmin = permissions.includes("*"); - - let additional: { [key: string]: string } = {}; - let additionalPermissions = permissions.map((e) => e.split(".")).filter((e) => e[0] == "additional") as Array< - ["additional", string, string] - >; - for (let split of additionalPermissions) { - let module = sectionsAndModules.additional.find((a) => a.key == split[1]); - if (!isAdmin || (isAdmin && !module.emptyIfAdmin)) additional[split[1]] = split[2]; - } - - if (isAdmin) { + static convertToObject(permissions: Array): PermissionObject { + if (permissions.includes("*")) { return { admin: true, - adminByOwner: isOwner, - ...(Object.keys(additional).length > 0 && { additional }), }; } - let output: PermissionObject = {}; - let splitPermissions = permissions.map((e) => e.split(".")).filter((e) => e[0] != "additional") as Array< + let splitPermissions = permissions.map((e) => e.split(".")) as Array< [PermissionSection, PermissionModule | PermissionType | "*", PermissionType | "*"] >; for (let split of splitPermissions) { @@ -229,31 +208,15 @@ export default class PermissionHelper { } } } - - return { - adminByOwner: isOwner, - ...output, - ...(Object.keys(additional).length > 0 && { additional }), - }; + return output; } static convertToStringArray(permissions: PermissionObject): Array { - let isAdmin = permissions?.admin; - - let additional: Array = []; - let additionalPermissions = Object.entries(permissions?.additional ?? {}); - for (let add of additionalPermissions) { - additional.push(`additional.${add[0]}.${add[1]}`); + if (permissions?.admin) { + return ["*"]; } - - if (isAdmin) { - return ["*", ...additional]; - } - let output: Array = []; - let sections = Object.keys(permissions).filter((m: PermissionSection) => - permissionSections.includes(m) - ) as Array; + let sections = Object.keys(permissions) as Array; for (let section of sections) { if (permissions[section].all) { let types = permissions[section].all; @@ -279,8 +242,7 @@ export default class PermissionHelper { } } } - - return [...output, ...additional]; + return output; } static getWhatToAdd(before: Array, after: Array): Array { diff --git a/src/helpers/templateHelper.ts b/src/helpers/templateHelper.ts index 3dc5ad8..b8d97f1 100644 --- a/src/helpers/templateHelper.ts +++ b/src/helpers/templateHelper.ts @@ -11,9 +11,7 @@ export abstract class TemplateHelper { try { tmpFile = FileSystemHelper.readTemplateFile(`/src/templates/${template}.template.html`); } catch (err) { - tmpFile = FileSystemHelper.readTemplateFile( - `/src/templates/${template.split(".")[template.split(".").length - 1]}.template.html` - ); + tmpFile = FileSystemHelper.readTemplateFile(`/src/templates/${template.split(".")[1]}.template.html`); } return tmpFile; } @@ -29,9 +27,9 @@ export abstract class TemplateHelper { } static normalizeTemplate(template: string): string { - template = template.replaceAll(/.*?<\/listend>/g, "{{/each}}"); - template = template.replaceAll(/]*>(WDH Start: )?/g, "{{#each "); - template = template.replaceAll(/<\/liststart>/g, "}}"); + template = template.replace(/.*?<\/listend>/g, "{{/each}}"); + template = template.replace(/]*>(WDH Start: )?/g, "{{#each "); + template = template.replace(/<\/liststart>/g, "}}"); return template; } diff --git a/src/routes/admin/club/newsletter.ts b/src/routes/admin/club/newsletter.ts index 5ec1aba..9a71bbf 100644 --- a/src/routes/admin/club/newsletter.ts +++ b/src/routes/admin/club/newsletter.ts @@ -16,8 +16,6 @@ import { createNewsletterPrintoutPreviewById, getNewsletterPrintoutProgressById, getNewsletterSendingProgressById, - getNewsletterMailReceiversById, - getNewsletterPrintReceiversById, } from "../../../controller/admin/club/newsletterController"; import PermissionHelper from "../../../helpers/permissionHelper"; @@ -59,14 +57,6 @@ router.get("/:newsletterId/sendprogress", async (req: Request, res: Response) => await getNewsletterSendingProgressById(req, res); }); -router.get("/:newsletterId/printrecipients", async (req: Request, res: Response) => { - await getNewsletterPrintReceiversById(req, res); -}); - -router.get("/:newsletterId/mailrecipients", async (req: Request, res: Response) => { - await getNewsletterMailReceiversById(req, res); -}); - router.post( "/", PermissionHelper.passCheckMiddleware("create", "club", "protocol"), diff --git a/src/type/permissionTypes.ts b/src/type/permissionTypes.ts index 1061d49..e9ed138 100644 --- a/src/type/permissionTypes.ts +++ b/src/type/permissionTypes.ts @@ -30,7 +30,6 @@ export type PermissionString = | `${PermissionSection}.${PermissionModule}.*` // für alle Berechtigungen in einem Modul | `${PermissionSection}.${PermissionType}` // für spezifische Berechtigungen in einem Abschnitt | `${PermissionSection}.*` // für alle Berechtigungen in einem Abschnitt - | `additional.${string}.${string}` // additional | "*"; // für Admin export type PermissionObject = { @@ -39,20 +38,10 @@ export type PermissionObject = { } & { all?: Array | "*" }; } & { admin?: boolean; - adminByOwner?: boolean; -} & { - additional?: { [key: string]: string }; }; export type SectionsAndModulesObject = { [section in PermissionSection]: Array; -} & { - additional?: Array<{ - key: string; - name: string; - type: "number" | "string"; - emptyIfAdmin: boolean; - }>; }; export const permissionSections: Array = ["club", "configuration", "management"]; @@ -96,5 +85,4 @@ export const sectionsAndModules: SectionsAndModulesObject = { "newsletter_config", ], management: ["user", "role", "webapi", "backup"], - additional: [], };