mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-31 20:24:27 -04:00
Add set permission option on admin panel
This commit is contained in:
parent
1e4081a03f
commit
13c0430c93
@ -32,19 +32,28 @@ import UserI from "@material-symbols/svg-400/rounded/account_circle.svg";
|
|||||||
import Admin from "@material-symbols/svg-400/rounded/shield_person.svg";
|
import Admin from "@material-symbols/svg-400/rounded/shield_person.svg";
|
||||||
import MoreVert from "@material-symbols/svg-400/rounded/more_vert.svg";
|
import MoreVert from "@material-symbols/svg-400/rounded/more_vert.svg";
|
||||||
import Delete from "@material-symbols/svg-400/rounded/delete.svg";
|
import Delete from "@material-symbols/svg-400/rounded/delete.svg";
|
||||||
import { useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||||
|
|
||||||
const UserGrid = ({
|
const UserGrid = ({
|
||||||
isLoading,
|
isLoading,
|
||||||
slug,
|
id,
|
||||||
username,
|
username,
|
||||||
avatar,
|
avatar,
|
||||||
isAdmin,
|
isAdmin,
|
||||||
...props
|
...props
|
||||||
}: WithLoading<{ slug: string; username: string; avatar: string; isAdmin: boolean }>) => {
|
}: WithLoading<{ id: string; username: string; avatar: string; isAdmin: boolean }>) => {
|
||||||
const { css } = useYoshiki();
|
const { css } = useYoshiki();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
const { mutateAsync } = useMutation({
|
||||||
|
mutationFn: async (update: Partial<User>) =>
|
||||||
|
await queryFn({
|
||||||
|
path: ["users", id],
|
||||||
|
method: "PATCH",
|
||||||
|
body: update,
|
||||||
|
}),
|
||||||
|
onSettled: async () => await queryClient.invalidateQueries({ queryKey: ["users"] }),
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View {...css({ alignItems: "center" }, props)}>
|
<View {...css({ alignItems: "center" }, props)}>
|
||||||
@ -62,6 +71,35 @@ const UserGrid = ({
|
|||||||
<P>{username}</P>
|
<P>{username}</P>
|
||||||
</Skeleton>
|
</Skeleton>
|
||||||
<Menu Trigger={IconButton} icon={MoreVert} {...tooltip(t("misc.more"))}>
|
<Menu Trigger={IconButton} icon={MoreVert} {...tooltip(t("misc.more"))}>
|
||||||
|
<Menu.Sub label={t("admin.users.set-permissions")} icon={Admin}>
|
||||||
|
<Menu.Item
|
||||||
|
selected={!isAdmin}
|
||||||
|
label={t("admin.users.regularUser")}
|
||||||
|
onSelect={() =>
|
||||||
|
mutateAsync({
|
||||||
|
permissions: ["overall.read"],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<Menu.Item
|
||||||
|
selected={isAdmin}
|
||||||
|
label={t("admin.users.adminUser")}
|
||||||
|
onSelect={() =>
|
||||||
|
mutateAsync({
|
||||||
|
permissions: [
|
||||||
|
"overall.read",
|
||||||
|
"overall.write",
|
||||||
|
"overall.create",
|
||||||
|
"overall.delete",
|
||||||
|
"admin.read",
|
||||||
|
"admin.write",
|
||||||
|
"admin.create",
|
||||||
|
"admin.delete",
|
||||||
|
],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Menu.Sub>
|
||||||
<Menu.Item
|
<Menu.Item
|
||||||
label={t("admin.users.delete")}
|
label={t("admin.users.delete")}
|
||||||
icon={Delete}
|
icon={Delete}
|
||||||
@ -74,7 +112,7 @@ const UserGrid = ({
|
|||||||
{
|
{
|
||||||
text: t("misc.delete"),
|
text: t("misc.delete"),
|
||||||
onPress: async () => {
|
onPress: async () => {
|
||||||
await queryFn({ path: ["users", slug], method: "DELETE" });
|
await queryFn({ path: ["users", id], method: "DELETE" });
|
||||||
await queryClient.invalidateQueries({ queryKey: ["users"] });
|
await queryClient.invalidateQueries({ queryKey: ["users"] });
|
||||||
},
|
},
|
||||||
style: "destructive",
|
style: "destructive",
|
||||||
@ -109,7 +147,7 @@ const UserList = () => {
|
|||||||
{(user) => (
|
{(user) => (
|
||||||
<UserGrid
|
<UserGrid
|
||||||
isLoading={user.isLoading as any}
|
isLoading={user.isLoading as any}
|
||||||
slug={user.slug}
|
id={user.id}
|
||||||
username={user.username}
|
username={user.username}
|
||||||
avatar={user.logo}
|
avatar={user.logo}
|
||||||
isAdmin={user.permissions?.includes("admin.write")}
|
isAdmin={user.permissions?.includes("admin.write")}
|
||||||
|
@ -36,7 +36,7 @@ export const Unauthorized = ({ missing }: { missing: string[] }) => {
|
|||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<P>{t("errors.unauthorized", { permission: missing.join(", ") })}</P>
|
<P>{t("errors.unauthorized", { permission: missing?.join(", ") })}</P>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -214,6 +214,7 @@
|
|||||||
"label": "Users",
|
"label": "Users",
|
||||||
"adminUser": "Admin",
|
"adminUser": "Admin",
|
||||||
"regularUser": "User",
|
"regularUser": "User",
|
||||||
|
"set-permissions": "Set permissions",
|
||||||
"delete": "Delete user"
|
"delete": "Delete user"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -214,6 +214,7 @@
|
|||||||
"label": "Comptes",
|
"label": "Comptes",
|
||||||
"adminUser": "Admin",
|
"adminUser": "Admin",
|
||||||
"regularUser": "Utilisateur",
|
"regularUser": "Utilisateur",
|
||||||
|
"set-permissions": "Definir les permissions",
|
||||||
"delete": "Supprimer l'utilisateur"
|
"delete": "Supprimer l'utilisateur"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user