|
@@ -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");
|
|
|
}
|
|
|
}
|