Prechádzať zdrojové kódy

fix: assertPermission improperly handling models

Owen Diffey 1 rok pred
rodič
commit
46983ca1fd
1 zmenil súbory, kde vykonal 15 pridanie a 14 odobranie
  1. 15 14
      backend/src/JobContext.ts

+ 15 - 14
backend/src/JobContext.ts

@@ -147,24 +147,25 @@ export default class JobContext {
 	}
 
 	public async assertPermission(permission: string) {
-		let permissions = await this.getUserPermissions();
+		let hasPermission = false;
 
-		if (permission.startsWith("data")) {
-			const [, modelName, modelId] =
-				/^data\.([a-z]+)\.[A-z]+\.?([A-z0-9]+)?$/.exec(permission);
+		const [, moduleName, modelOrJobName, jobName, modelId] =
+			/^([a-z]+)\.([a-z]+)\.([A-z]+)\.?([A-z0-9]+)?$/.exec(permission) ??
+			[];
 
-			permissions = {
-				...permissions,
-				...(await this.getUserModelPermissions({
-					modelName,
-					modelId
-				}))
-			};
+		if (moduleName === "data" && modelOrJobName && jobName) {
+			const permissions = await this.getUserModelPermissions({
+				modelName: modelOrJobName,
+				modelId
+			});
 
-			return;
+			hasPermission = permissions[`data.${modelOrJobName}.${jobName}`];
+		} else {
+			const permissions = await this.getUserPermissions();
+
+			hasPermission = permissions[permission];
 		}
 
-		if (!permissions[permission])
-			throw new Error("Insufficient permissions");
+		if (!hasPermission) throw new Error("Insufficient permissions");
 	}
 }