permission additional content
This commit is contained in:
parent
f7faf23269
commit
4aa2d3ba8f
2 changed files with 60 additions and 9 deletions
|
@ -4,9 +4,11 @@ import {
|
|||
permissionModules,
|
||||
PermissionObject,
|
||||
PermissionSection,
|
||||
permissionSections,
|
||||
PermissionString,
|
||||
PermissionType,
|
||||
permissionTypes,
|
||||
sectionsAndModules,
|
||||
} from "../type/permissionTypes";
|
||||
import ForbiddenRequestException from "../exceptions/forbiddenRequestException";
|
||||
|
||||
|
@ -73,6 +75,11 @@ export default class PermissionHelper {
|
|||
}, false);
|
||||
}
|
||||
|
||||
static canValue(permissions: PermissionObject, key: string, emptyIfAdmin: boolean = false): string {
|
||||
if (emptyIfAdmin && permissions.admin) return "";
|
||||
return permissions?.additional?.[key] ?? "";
|
||||
}
|
||||
|
||||
static passCheckMiddleware(
|
||||
requiredPermissions: PermissionType | "admin",
|
||||
section: PermissionSection,
|
||||
|
@ -160,13 +167,26 @@ export default class PermissionHelper {
|
|||
}
|
||||
|
||||
static convertToObject(permissions: Array<PermissionString>): PermissionObject {
|
||||
if (permissions.includes("*")) {
|
||||
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) {
|
||||
return {
|
||||
admin: true,
|
||||
...(Object.keys(additional).length > 0 && { additional }),
|
||||
};
|
||||
}
|
||||
|
||||
let output: PermissionObject = {};
|
||||
let splitPermissions = permissions.map((e) => e.split(".")) as Array<
|
||||
let splitPermissions = permissions.map((e) => e.split(".")).filter((e) => e[0] != "additional") as Array<
|
||||
[PermissionSection, PermissionModule | PermissionType | "*", PermissionType | "*"]
|
||||
>;
|
||||
for (let split of splitPermissions) {
|
||||
|
@ -208,15 +228,30 @@ export default class PermissionHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
return output;
|
||||
|
||||
return {
|
||||
...output,
|
||||
...(Object.keys(additional).length > 0 && { additional }),
|
||||
};
|
||||
}
|
||||
|
||||
static convertToStringArray(permissions: PermissionObject): Array<PermissionString> {
|
||||
if (permissions?.admin) {
|
||||
return ["*"];
|
||||
let isAdmin = permissions?.admin;
|
||||
|
||||
let additional: Array<PermissionString> = [];
|
||||
let additionalPermissions = Object.entries(permissions?.additional ?? {});
|
||||
for (let add of additionalPermissions) {
|
||||
additional.push(`additional.${add[0]}.${add[1]}`);
|
||||
}
|
||||
|
||||
if (isAdmin) {
|
||||
return ["*", ...additional];
|
||||
}
|
||||
|
||||
let output: Array<PermissionString> = [];
|
||||
let sections = Object.keys(permissions) as Array<PermissionSection>;
|
||||
let sections = Object.keys(permissions).filter((m: PermissionSection) =>
|
||||
permissionSections.includes(m)
|
||||
) as Array<PermissionSection>;
|
||||
for (let section of sections) {
|
||||
if (permissions[section].all) {
|
||||
let types = permissions[section].all;
|
||||
|
@ -242,7 +277,8 @@ export default class PermissionHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
return output;
|
||||
|
||||
return [...output, ...additional];
|
||||
}
|
||||
|
||||
static getWhatToAdd(before: Array<PermissionString>, after: Array<PermissionString>): Array<PermissionString> {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
export type PermissionSection = "operation" | "configuration" | "management";
|
||||
|
||||
export type PermissionModule = "mission" | "force" | "vehicle" | "equipment" | "user" | "role" | "backup";
|
||||
export type PermissionModule = "mission" | "force" | "vehicle" | "equipment" | "user" | "role" | "backup" | "import";
|
||||
|
||||
export type PermissionType = "read" | "create" | "update" | "delete";
|
||||
|
||||
|
@ -9,6 +9,7 @@ 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 = {
|
||||
|
@ -17,10 +18,19 @@ export type PermissionObject = {
|
|||
} & { all?: Array<PermissionType> | "*" };
|
||||
} & {
|
||||
admin?: boolean;
|
||||
} & {
|
||||
additional?: { [key: string]: string };
|
||||
};
|
||||
|
||||
export type SectionsAndModulesObject = {
|
||||
[section in PermissionSection]: Array<PermissionModule>;
|
||||
} & {
|
||||
additional?: Array<{
|
||||
key: string;
|
||||
name: string;
|
||||
type: "number" | "string";
|
||||
emptyIfAdmin: boolean;
|
||||
}>;
|
||||
};
|
||||
|
||||
export const permissionSections: Array<PermissionSection> = ["operation", "configuration", "management"];
|
||||
|
@ -32,10 +42,15 @@ export const permissionModules: Array<PermissionModule> = [
|
|||
"user",
|
||||
"role",
|
||||
"backup",
|
||||
"import",
|
||||
];
|
||||
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
|
||||
export const sectionsAndModules: SectionsAndModulesObject = {
|
||||
operation: ["mission"],
|
||||
configuration: ["force", "vehicle", "equipment"],
|
||||
management: ["user", "role", "backup"],
|
||||
management: ["user", "role", "backup", "import"],
|
||||
additional: [
|
||||
{ key: "maxVisInDays", name: "max Sichtbarkeit in Tagen", type: "number", emptyIfAdmin: true },
|
||||
{ key: "maxVisByMissions", name: "max Sichtbarkeit an Einsätzen", type: "number", emptyIfAdmin: true },
|
||||
],
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue