improvement: add missing permission checks on frontend

This commit is contained in:
Scott Wilson
2025-12-08 16:37:00 -08:00
parent 77ec24c323
commit c6da76206f
@@ -1,8 +1,10 @@
import { subject } from "@casl/ability";
import { useParams } from "@tanstack/react-router"; import { useParams } from "@tanstack/react-router";
import { EllipsisIcon, LockIcon } from "lucide-react"; import { EllipsisIcon, LockIcon } from "lucide-react";
import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { VariablePermissionCan } from "@app/components/permissions";
import { DeleteActionModal, Modal, ModalContent, Tooltip } from "@app/components/v2"; import { DeleteActionModal, Modal, ModalContent, Tooltip } from "@app/components/v2";
import { import {
Badge, Badge,
@@ -16,7 +18,13 @@ import {
UnstableDropdownMenuTrigger, UnstableDropdownMenuTrigger,
UnstableIconButton UnstableIconButton
} from "@app/components/v3"; } from "@app/components/v3";
import { useOrganization } from "@app/context"; import {
OrgPermissionIdentityActions,
OrgPermissionSubjects,
ProjectPermissionIdentityActions,
ProjectPermissionSub,
useOrganization
} from "@app/context";
import { usePopUp } from "@app/hooks"; import { usePopUp } from "@app/hooks";
import { import {
IdentityAuthMethod, IdentityAuthMethod,
@@ -190,23 +198,61 @@ export const Content = ({
</UnstableIconButton> </UnstableIconButton>
</UnstableDropdownMenuTrigger> </UnstableDropdownMenuTrigger>
<UnstableDropdownMenuContent align="end"> <UnstableDropdownMenuContent align="end">
<UnstableDropdownMenuItem <VariablePermissionCan
onClick={(e) => { type={projectId ? "project" : "org"}
e.stopPropagation(); I={
handlePopUpOpen("identityAuthMethod", authMethod); projectId
}} ? ProjectPermissionIdentityActions.Edit
: OrgPermissionIdentityActions.Edit
}
a={
projectId
? subject(ProjectPermissionSub.Identity, {
identityId
})
: OrgPermissionSubjects.Identity
}
> >
Edit Auth Method {(isAllowed) => (
</UnstableDropdownMenuItem> <UnstableDropdownMenuItem
<UnstableDropdownMenuItem isDisabled={!isAllowed}
onClick={(e) => { onClick={(e) => {
e.stopPropagation(); e.stopPropagation();
handlePopUpOpen("revokeAuthMethod", authMethod); handlePopUpOpen("identityAuthMethod", authMethod);
}} }}
variant="danger" >
Edit Auth Method
</UnstableDropdownMenuItem>
)}
</VariablePermissionCan>
<VariablePermissionCan
type={projectId ? "project" : "org"}
I={
projectId
? ProjectPermissionIdentityActions.Delete
: OrgPermissionIdentityActions.Delete
}
a={
projectId
? subject(ProjectPermissionSub.Identity, {
identityId
})
: OrgPermissionSubjects.Identity
}
> >
Remove Auth Method {(isAllowed) => (
</UnstableDropdownMenuItem> <UnstableDropdownMenuItem
isDisabled={!isAllowed}
onClick={(e) => {
e.stopPropagation();
handlePopUpOpen("revokeAuthMethod", authMethod);
}}
variant="danger"
>
Remove Auth Method
</UnstableDropdownMenuItem>
)}
</VariablePermissionCan>
</UnstableDropdownMenuContent> </UnstableDropdownMenuContent>
</UnstableDropdownMenu> </UnstableDropdownMenu>
</UnstableAccordionTrigger> </UnstableAccordionTrigger>