Skip to content

Commit

Permalink
disable menu items to edit roles for self (#135)
Browse files Browse the repository at this point in the history
  • Loading branch information
pnzrr authored Feb 16, 2024
1 parent 3ff1889 commit ca59a8e
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 11 deletions.
15 changes: 9 additions & 6 deletions src/pages/member/roles.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ const Roles = () => {

const hasManageRolesRole = hasManageRolesRoleCheck(orgId);
const hasApplicationRoles = OrgRoles.length > 0;
const canEditSetRoleButtons = isSameUserAndMember || !hasManageRolesRole;

return (
<div className="mt-4 md:mt-16">
Expand All @@ -249,19 +250,21 @@ const Roles = () => {
</div>
)}
<div className="mt-8 flex items-center space-x-2 border-b pb-2">
<div className="inline-block text-sm text-gray-600">{t("role-set")}</div>
<div className="inline-block text-sm text-gray-600">
{t("role-set")}
</div>
<Button
onClick={grantAllRoles}
disabled={
!hasManageRolesRole ||
canEditSetRoleButtons ||
roleData.filter((rd) => rd.isChecked).length === roleData.length
}
text={t("all")}
/>
<Button
onClick={() => grantFilteredRoles("manage")}
disabled={
!hasManageRolesRole ||
canEditSetRoleButtons ||
!(
roleData.filter(
(rd) => rd.name.startsWith("manage") && !rd.isChecked
Expand All @@ -273,7 +276,7 @@ const Roles = () => {
<Button
onClick={() => grantFilteredRoles("view")}
disabled={
!hasManageRolesRole ||
canEditSetRoleButtons ||
!(
roleData.filter(
(rd) => rd.name.startsWith("view") && !rd.isChecked
Expand All @@ -286,7 +289,7 @@ const Roles = () => {
<Button
onClick={() => grantFilteredRoles("application")}
disabled={
!hasManageRolesRole ||
canEditSetRoleButtons ||
!(
roleData.filter((rd) => rd.isApplicationRole && !rd.isChecked)
.length > 0
Expand All @@ -298,7 +301,7 @@ const Roles = () => {
<Button
onClick={revokeAllRoles}
disabled={
!hasManageRolesRole ||
canEditSetRoleButtons ||
roleData.filter((rd) => rd.isChecked).length === 0
}
text={t("none")}
Expand Down
6 changes: 4 additions & 2 deletions src/pages/organizations/components/member-action-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ export default function MembersActionMenu({ member, orgId, realm }: Props) {
hasManageMembersRole: hasManageMembersRoleCheck,
hasManageRolesRole: hasManageRolesRoleCheck,
} = useUser();
const isRemoveDisabled = !user || member.id === user?.id;
const isSameUserAndMember = member.id === user?.id;
const isRemoveDisabled = !user || isSameUserAndMember;

const [isRemoveConfOpen, setRemoveConfOpen] = useState(false);

const [removeOrganizationMember, { isLoading }] =
Expand Down Expand Up @@ -96,7 +98,7 @@ export default function MembersActionMenu({ member, orgId, realm }: Props) {
>
<Menu.Items className="absolute right-0 z-10 mt-2 w-56 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none dark:border dark:border-zinc-600 dark:bg-p2dark-900">
<div className="py-1">
<Menu.Item disabled={!hasManageRolesRole}>
<Menu.Item disabled={isSameUserAndMember || !hasManageRolesRole}>
{({ active, disabled }) => {
return disabled ? (
<MenuItemButton active={active} disabled={disabled}>
Expand Down
9 changes: 6 additions & 3 deletions src/pages/organizations/components/member-roles.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { Link } from "react-router-dom";
import Button from "components/elements/forms/buttons/button";
import { checkOrgForRole } from "components/utils/check-org-for-role";
import useUser from "components/utils/useUser";
import { useTranslation } from "react-i18next";

type Props = {
member: UserRepresentation;
Expand All @@ -33,9 +34,11 @@ const FilteredRole: React.FC<FilteredRoleProp> = ({
member,
orgId,
}) => {
const { hasManageRolesRole: hasManageRolesRoleCheck } = useUser();
const { hasManageRolesRole: hasManageRolesRoleCheck, user } = useUser();
const filtered = roles.filter((f) => regexp.test(f.name));
const hasManageRolesRole = hasManageRolesRoleCheck(orgId);
const isSameUserAndMember = member.id === user?.id;
const { t } = useTranslation();

return (
<Menu as="div" className="relative inline-block w-full text-left md:w-auto">
Expand All @@ -57,11 +60,11 @@ const FilteredRole: React.FC<FilteredRoleProp> = ({
</div>
</Menu.Item>
))}
{hasManageRolesRole && (
{!isSameUserAndMember && hasManageRolesRole && (
<Menu.Item>
<Link to={`/organizations/${orgId}/members/${member.id}/roles`}>
<Button isCompact className="mt-4 w-full">
Edit roles
{t("editRoles")}
</Button>
</Link>
</Menu.Item>
Expand Down

0 comments on commit ca59a8e

Please sign in to comment.