;
selectedCell: AccessMatrixCell | null;
onSelectCell: (cell: AccessMatrixCell) => void;
@@ -3161,7 +3196,8 @@ function PublicAccessUsersPanel({
const membership = data.memberships.find((item) => item.clientId === matrix.client.id && item.userId === user.id);
if (!membership) return null;
- const protectedUser = user.id === "user_root";
+ const protectedUser = isProtectedLauncherUser(user.id);
+ const protectedFromActor = isProtectedFromCurrentActor(me, user.id);
const inviterMeta = getMembershipInviterMeta(data, membership);
const operationalCoreCell = operationalCoreService
? matrix.cells.find((cell) => cell.userId === user.id && cell.serviceId === operationalCoreService.id) ?? null
@@ -3196,7 +3232,7 @@ function PublicAccessUsersPanel({
)}
|
- {protectedUser ? (
+ {protectedFromActor ? (
{membershipRoleLabel(membership.role)}
) : (
void;
}) {
const membership = data.memberships.find((item) => item.clientId === client.id && item.userId === user.id);
- const protectedUser = user.id === "user_root" || membership?.role === "client_owner";
+ const protectedSelfManage = canSelfManageProtectedUser(me, user.id);
+ const protectedUser = isProtectedFromCurrentActor(me, user.id) || (membership?.role === "client_owner" && !protectedSelfManage);
const basePendingValue = pendingAccessAssignments[accessCellKey(user.id, service.id)];
const baseAssignmentValue = basePendingValue ?? accessAssignmentValue(cell);
const baseSelectOptions = publicSelfService ? publicOperationalCoreAccessOptions : accessAssignmentOptions;
@@ -3628,6 +3668,7 @@ function AccessCellControl({
pendingValue,
busy = false,
publicSelfService = false,
+ readOnly = false,
onSelectCell,
onSetAccess,
onOpenDetails,
@@ -3637,6 +3678,7 @@ function AccessCellControl({
pendingValue?: AccessAssignmentValue;
busy?: boolean;
publicSelfService?: boolean;
+ readOnly?: boolean;
onSelectCell: (cell: AccessMatrixCell) => void;
onSetAccess: (value: AccessAssignmentValue) => void;
onOpenDetails?: () => void;
@@ -3663,6 +3705,7 @@ function AccessCellControl({
cell.effectiveAccess.allowed && "access-cell--allowed",
!cell.effectiveAccess.allowed && "access-cell--denied",
cell.effectiveAccess.source === "exception" && !publicSelfService && "access-cell--exception",
+ readOnly && "access-cell--readonly",
isPending && "access-cell--pending",
active && "access-cell--active"
);
@@ -3685,6 +3728,15 @@ function AccessCellControl({
);
}
+ if (readOnly) {
+ return (
+
+ {displayTitle}
+ {displaySource}
+
+ );
+ }
+
return (
|