72 lines
2.9 KiB
TypeScript
72 lines
2.9 KiB
TypeScript
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);
|
|
}
|