feat: big update 07.05.26
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import {
|
||||
Button,
|
||||
FormControlLabel,
|
||||
Checkbox,
|
||||
Paper,
|
||||
TextField,
|
||||
@@ -97,6 +96,20 @@ export const UserEditPage = observer(() => {
|
||||
languageStore.setLanguage("ru");
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
const allRw = ROLE_RESOURCES.every(({ key }) => localRoles.includes(`${key}_rw`));
|
||||
const isAdmin = allRw && !localRoles.includes("devices_maintenance_rw");
|
||||
if (isAdmin !== editUserData.is_admin) {
|
||||
setEditUserData(
|
||||
editUserData.name || "",
|
||||
editUserData.email || "",
|
||||
editUserData.password || "",
|
||||
isAdmin,
|
||||
editUserData.icon || ""
|
||||
);
|
||||
}
|
||||
}, [localRoles]);
|
||||
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
if (id) {
|
||||
@@ -311,35 +324,33 @@ export const UserEditPage = observer(() => {
|
||||
<section className="flex flex-col gap-4">
|
||||
<Typography variant="h6">Права доступа</Typography>
|
||||
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Checkbox
|
||||
checked={localRoles.includes("admin")}
|
||||
onChange={(e) => {
|
||||
if (e.target.checked) {
|
||||
setLocalRoles((prev) => {
|
||||
let next = prev.filter((r) => r !== "admin");
|
||||
for (const { key } of ROLE_RESOURCES) {
|
||||
next = next.filter((r) => r !== `${key}_ro` && r !== `${key}_rw`);
|
||||
next.push(`${key}_rw`);
|
||||
}
|
||||
if (!next.includes("snapshot_create")) {
|
||||
next.push("snapshot_create");
|
||||
}
|
||||
if (!next.includes("devices_maintenance_rw")) {
|
||||
next.push("devices_maintenance_rw");
|
||||
}
|
||||
next.push("admin");
|
||||
return next;
|
||||
});
|
||||
} else {
|
||||
setLocalRoles((prev) => prev.filter((r) => r !== "admin"));
|
||||
}
|
||||
}}
|
||||
/>
|
||||
}
|
||||
label="Полный доступ (admin)"
|
||||
/>
|
||||
<Box sx={{ display: "flex", gap: 1 }}>
|
||||
<Button
|
||||
variant="outlined"
|
||||
size="small"
|
||||
onClick={() => {
|
||||
setEditUserData(editUserData.name || "", editUserData.email || "", editUserData.password || "", true, editUserData.icon || "");
|
||||
const next: string[] = [];
|
||||
for (const { key } of ROLE_RESOURCES) {
|
||||
next.push(`${key}_rw`);
|
||||
}
|
||||
next.push("snapshot_create");
|
||||
setLocalRoles(next);
|
||||
}}
|
||||
>
|
||||
Полный доступ (admin)
|
||||
</Button>
|
||||
<Button
|
||||
variant="outlined"
|
||||
size="small"
|
||||
onClick={() => {
|
||||
setEditUserData(editUserData.name || "", editUserData.email || "", editUserData.password || "", false, editUserData.icon || "");
|
||||
setLocalRoles(["devices_ro", "vehicles_ro", "devices_maintenance_rw"]);
|
||||
}}
|
||||
>
|
||||
Администратор ТО
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
<Box sx={{ border: "1px solid", borderColor: "divider", borderRadius: 1 }}>
|
||||
<Table size="small">
|
||||
@@ -371,20 +382,6 @@ export const UserEditPage = observer(() => {
|
||||
);
|
||||
}
|
||||
|
||||
const allRw = ROLE_RESOURCES.every(({ key: k }) =>
|
||||
updated.includes(`${k}_rw`),
|
||||
);
|
||||
if (allRw && !updated.includes("admin")) {
|
||||
const next = [...updated];
|
||||
if (!next.includes("snapshot_create")) {
|
||||
next.push("snapshot_create");
|
||||
}
|
||||
next.push("admin");
|
||||
return next;
|
||||
}
|
||||
if (!allRw) {
|
||||
return updated.filter((r) => r !== "admin");
|
||||
}
|
||||
return updated;
|
||||
});
|
||||
};
|
||||
@@ -462,12 +459,14 @@ export const UserEditPage = observer(() => {
|
||||
title="Разрешает создавать новые снапшоты"
|
||||
/>
|
||||
) : isDevicesResource ? (
|
||||
<Checkbox
|
||||
checked={localRoles.includes("devices_maintenance_rw")}
|
||||
onChange={(e) => handleMaintenanceChange(e.target.checked)}
|
||||
size="small"
|
||||
title="Разрешает переводить устройства в режим технического обслуживания"
|
||||
/>
|
||||
<Box sx={{ display: "flex", gap: 0.5, justifyContent: "center" }}>
|
||||
<Checkbox
|
||||
checked={localRoles.includes("devices_maintenance_rw")}
|
||||
onChange={(e) => handleMaintenanceChange(e.target.checked)}
|
||||
size="small"
|
||||
title="Техническое обслуживание (ТО)"
|
||||
/>
|
||||
</Box>
|
||||
) : (
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
-
|
||||
|
||||
Reference in New Issue
Block a user