Fixed creation of users + better frontend handling of permissions
This commit is contained in:
@@ -48,9 +48,9 @@ export default function BlogTable({ user }: { user: IUser }) {
|
||||
|
||||
const { replace } = useRouter();
|
||||
|
||||
const canUpdate = hasPermissions(user.roles, { blogs: ["update"] });
|
||||
const canInsert = hasPermissions(user.roles, { blogs: ["insert"] });
|
||||
const canDelete = hasPermissions(user.roles, { blogs: ["delete"] });
|
||||
const { blogs: blogsPerm } = hasPermissions(user.roles, {
|
||||
blogs: ["update", "insert", "delete"],
|
||||
} as const);
|
||||
|
||||
const updateSearchParam = useCallback(
|
||||
(key: string, value?: string) => {
|
||||
@@ -136,7 +136,7 @@ export default function BlogTable({ user }: { user: IUser }) {
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
{canInsert && (
|
||||
{blogsPerm.insert && (
|
||||
<Button asChild>
|
||||
<Link href="/dashboard/blogs/new">Nouvel article</Link>
|
||||
</Button>
|
||||
@@ -151,7 +151,7 @@ export default function BlogTable({ user }: { user: IUser }) {
|
||||
<TableHead>Catégorie</TableHead>
|
||||
<TableHead>Auteur</TableHead>
|
||||
<TableHead>Publié</TableHead>
|
||||
{(canUpdate || canDelete) && (
|
||||
{(blogsPerm.update || blogsPerm.delete) && (
|
||||
<TableHead className="w-[100px]">
|
||||
Actions
|
||||
</TableHead>
|
||||
@@ -175,7 +175,7 @@ export default function BlogTable({ user }: { user: IUser }) {
|
||||
"MMM d, yyyy",
|
||||
)}
|
||||
</TableCell>
|
||||
{(canDelete || canUpdate) && (
|
||||
{(blogsPerm.delete || blogsPerm.update) && (
|
||||
<TableCell>
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
@@ -190,7 +190,7 @@ export default function BlogTable({ user }: { user: IUser }) {
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end">
|
||||
{canUpdate && (
|
||||
{blogsPerm.update && (
|
||||
<DropdownMenuItem asChild>
|
||||
<Link
|
||||
href={`/dashboard/blogs/${blog.blogID}`}
|
||||
@@ -201,7 +201,7 @@ export default function BlogTable({ user }: { user: IUser }) {
|
||||
</Link>
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canDelete && (
|
||||
{blogsPerm.delete && (
|
||||
<DropdownMenuItem
|
||||
className="flex items-center text-destructive focus:text-destructive"
|
||||
onClick={() =>
|
||||
|
||||
16
frontend/app/(auth)/dashboard/blogs/new/_new.tsx
Normal file
16
frontend/app/(auth)/dashboard/blogs/new/_new.tsx
Normal file
@@ -0,0 +1,16 @@
|
||||
"use client";
|
||||
|
||||
import { Loader2 } from "lucide-react";
|
||||
import dynamic from "next/dynamic";
|
||||
|
||||
const BlogEditor = dynamic(
|
||||
() => import("@/components/article/edit").then((mod) => mod.default),
|
||||
{
|
||||
ssr: false,
|
||||
loading: () => <Loader2 className="animate-spin" />,
|
||||
},
|
||||
);
|
||||
|
||||
export default function NewBlog() {
|
||||
return <BlogEditor />;
|
||||
}
|
||||
@@ -1,16 +1,21 @@
|
||||
"use client";
|
||||
"use server";
|
||||
import getMe from "@/lib/getMe";
|
||||
import hasPermissions from "@/lib/hasPermissions";
|
||||
import { redirect } from "next/navigation";
|
||||
import NewBlog from "./_new";
|
||||
|
||||
import { Loader2 } from "lucide-react";
|
||||
import dynamic from "next/dynamic";
|
||||
export default async function Page() {
|
||||
const me = await getMe();
|
||||
if (
|
||||
!me ||
|
||||
me.status === "Error" ||
|
||||
!me.data ||
|
||||
!hasPermissions(me.data.roles, {
|
||||
blogs: ["insert"],
|
||||
} as const).all
|
||||
) {
|
||||
redirect("/dashboard");
|
||||
}
|
||||
|
||||
const BlogEditor = dynamic(
|
||||
() => import("@/components/article/edit").then((mod) => mod.default),
|
||||
{
|
||||
ssr: false,
|
||||
loading: () => <Loader2 className="animate-spin" />,
|
||||
},
|
||||
);
|
||||
|
||||
export default function Page() {
|
||||
return <BlogEditor />;
|
||||
return <NewBlog />;
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@ export default async function Page() {
|
||||
me.status === "Error" ||
|
||||
!me.data ||
|
||||
!hasPermissions(me.data.roles, {
|
||||
blogs: ["get"],
|
||||
})
|
||||
blogs: ["get"] as const,
|
||||
}).all
|
||||
) {
|
||||
redirect("/dashboard");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user