[WEB-1255] fix: edit and delete access control for views (#4964)

This commit is contained in:
rahulramesha 2024-06-28 20:57:31 +05:30 committed by GitHub
parent 3b2af2d028
commit 96563b438e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 17 additions and 14 deletions

View file

@ -32,9 +32,11 @@ export const ViewQuickActions: React.FC<Props> = observer((props) => {
// store hooks
const {
membership: { currentProjectRole },
data,
} = useUser();
// auth
const isEditingAllowed = !!currentProjectRole && currentProjectRole >= EUserProjectRoles.MEMBER;
const isOwner = view?.owned_by === data?.id;
const isAdmin = !!currentProjectRole && currentProjectRole == EUserProjectRoles.ADMIN;
const viewLink = `${workspaceSlug}/projects/${projectId}/views/${view.id}`;
const handleCopyText = () =>
@ -53,7 +55,7 @@ export const ViewQuickActions: React.FC<Props> = observer((props) => {
action: () => setCreateUpdateViewModal(true),
title: "Edit",
icon: Pencil,
shouldRender: isEditingAllowed,
shouldRender: isOwner,
},
{
key: "open-new-tab",
@ -72,7 +74,7 @@ export const ViewQuickActions: React.FC<Props> = observer((props) => {
action: () => setDeleteViewModal(true),
title: "Delete",
icon: Trash2,
shouldRender: isEditingAllowed,
shouldRender: isOwner || isAdmin,
},
];

View file

@ -56,7 +56,7 @@ export const ViewListItemAction: FC<Props> = observer((props) => {
removeViewFromFavorites(workspaceSlug.toString(), projectId.toString(), view.id);
};
const createdByDetails = view.created_by ? getUserDetails(view.created_by) : undefined;
const ownedByDetails = view.owned_by ? getUserDetails(view.owned_by) : undefined;
return (
<>
@ -81,7 +81,7 @@ export const ViewListItemAction: FC<Props> = observer((props) => {
</div>
{/* created by */}
{<ButtonAvatars showTooltip={false} userIds={createdByDetails?.id ?? []} />}
{<ButtonAvatars showTooltip={false} userIds={ownedByDetails?.id ?? []} />}
{isEditingAllowed && (
<FavoriteStar

View file

@ -11,8 +11,8 @@ import { ContextMenu, CustomMenu, TContextMenuItem, TOAST_TYPE, setToast } from
// components
import { CreateUpdateWorkspaceViewModal, DeleteGlobalViewModal } from "@/components/workspace";
// constants
import { EUserProjectRoles } from "@/constants/project";
import { EViewAccess } from "@/constants/views";
import { EUserWorkspaceRoles } from "@/constants/workspace";
// helpers
import { cn } from "@/helpers/common.helper";
import { copyUrlToClipboard } from "@/helpers/string.helper";
@ -35,9 +35,11 @@ export const WorkspaceViewQuickActions: React.FC<Props> = observer((props) => {
// store hooks
const {
membership: { currentWorkspaceRole },
data,
} = useUser();
// auth
const isEditingAllowed = !!currentWorkspaceRole && currentWorkspaceRole >= EUserProjectRoles.MEMBER;
const isOwner = view?.owned_by === data?.id;
const isAdmin = !!currentWorkspaceRole && currentWorkspaceRole === EUserWorkspaceRoles.ADMIN;
const viewLink = `${workspaceSlug}/workspace-views/${view.id}`;
const handleCopyText = () =>
@ -56,7 +58,7 @@ export const WorkspaceViewQuickActions: React.FC<Props> = observer((props) => {
action: () => setUpdateViewModal(true),
title: "Edit",
icon: Pencil,
shouldRender: isEditingAllowed,
shouldRender: isOwner,
},
{
key: "open-new-tab",
@ -75,7 +77,7 @@ export const WorkspaceViewQuickActions: React.FC<Props> = observer((props) => {
action: () => setDeleteViewModal(true),
title: "Delete",
icon: Trash2,
shouldRender: isEditingAllowed,
shouldRender: isOwner || isAdmin,
},
];