mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-15 16:52:38 +00:00
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
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<ProjectPermissionSet>,
|
|
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;
|
|
}
|