import { Entity } from "@toolctrl/db/prisma-browser"; import { AppOrAdminData } from "../data/useAppOrAdminData"; import { DefaultPermission } from "~/application/dtos/shared/DefaultPermissions"; import { RowPermissionsWithDetails } from "../db/permissions/rowPermissions.db.server"; import { t as i18nT } from "i18next"; export function getEntityPermissions(entity: Entity): { name: string; description: string }[] { return [ { name: getEntityPermission(entity, "view"), description: i18nT("admin.permissions.entities.viewPage", { entity: entity.name }) }, { name: getEntityPermission(entity, "read"), description: i18nT("admin.permissions.entities.readRecords", { entity: entity.name }) }, { name: getEntityPermission(entity, "create"), description: i18nT("admin.permissions.entities.createRecord", { entity: entity.name }) }, { name: getEntityPermission(entity, "update"), description: i18nT("admin.permissions.entities.updateRecord", { entity: entity.name }) }, { name: getEntityPermission(entity, "delete"), description: i18nT("admin.permissions.entities.deleteRecord", { entity: entity.name }) }, ]; } export function getEntityPermission(entity: { name: string }, permission: "view" | "read" | "create" | "update" | "delete"): DefaultPermission { return `entity.${entity.name}.${permission}` as DefaultPermission; } export function getUserHasPermission(appOrAdminData: AppOrAdminData, permission: DefaultPermission) { if (appOrAdminData.isSuperAdmin) { return true; } if (appOrAdminData?.permissions === undefined) { return false; } if (permission.startsWith("entity.")) { return appOrAdminData.permissions.includes(permission); } return appOrAdminData.permissions.includes(permission); } export function getRowPermissionsObjects(permissions: RowPermissionsWithDetails[]) { return permissions .filter((f) => f !== null) .map((item) => { return { tenant: item.tenant ? { id: item.tenant.id, name: item.tenant.name } : null, role: item.role ? { id: item.role.id, name: item.role.name } : null, group: item.group ? { id: item.group.id, name: item.group.name } : null, user: item.user ? { id: item.user.id, email: item.user.email } : null, }; }) .filter((f) => f !== null); } export function getRowPermissionsDescription( permissions: { tenant: { id: string; name: string } | null; role: { id: string; name: string } | null; group: { id: string; name: string } | null; user: { id: string; email: string } | null; }[] ) { return permissions .filter((f) => f !== null) .map((item) => { if (item.tenant) { return `Account '${item.tenant.name}'`; } else if (item.role) { return `Role '${item.role.name}'`; } else if (item.group) { return `Group '${item.group.name}'`; } else if (item.user) { return `User '${item.user.email}'`; } return ""; }) .filter((f) => f !== null); }