import { MongoAbility, subject } from "@casl/ability"; import { ProjectPermissionSet } from "@app/context/ProjectPermissionContext"; import { ProjectPermissionSecretActions, ProjectPermissionSub, SecretSubjectFields } from "@app/context/ProjectPermissionContext/types"; export function hasSecretReadValueOrDescribePermission( permission: MongoAbility, action: Extract< ProjectPermissionSecretActions, ProjectPermissionSecretActions.DescribeSecret | ProjectPermissionSecretActions.ReadValue >, subjectFields?: SecretSubjectFields ) { let canNewPermission = false; let canOldPermission = false; if (subjectFields) { canNewPermission = permission.can(action, subject(ProjectPermissionSub.Secrets, subjectFields)); canOldPermission = permission.can( ProjectPermissionSecretActions.DescribeAndReadValue, subject(ProjectPermissionSub.Secrets, subjectFields) ); } else { canNewPermission = permission.can(action, ProjectPermissionSub.Secrets); canOldPermission = permission.can( ProjectPermissionSecretActions.DescribeAndReadValue, ProjectPermissionSub.Secrets ); } return canNewPermission || canOldPermission; }