feat(mod): lite /mod panel + clarify ACL vs housekeeping legacy
Co-authored-by: Cursor <[email protected]>
This commit is contained in:
1 parent
a384c9a8bb
commit
084cca6ea4
18 files changed
+931
-77
No files matched your search
@@ -1,18 +1,43 @@
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { getTranslations } from "next-intl/server";
|
||||
import type { Session } from "next-auth";
|
||||
import { getTranslations } from "next-intl/server";
|
||||
import { LanguageSwitcher } from "@/components/language-switcher";
|
||||
import { resolveHotelName } from "@/lib/hotel-name";
|
||||
import { MobileNav } from "@/components/mobile-nav";
|
||||
import { NavDropdown } from "@/components/nav-dropdown";
|
||||
import { NavbarColorPicker } from "@/components/navbar-color-picker";
|
||||
import { ThemeSwitcher } from "@/components/theme-switcher";
|
||||
import { resolveHotelName } from "@/lib/hotel-name";
|
||||
import { canAccess, getApiAdminContext, PERMS } from "@/lib/permissions";
|
||||
|
||||
export async function Navigation({ session }: { session: Session | null }) {
|
||||
const t = await getTranslations("nav");
|
||||
const brandLabel = await resolveHotelName();
|
||||
const isStaff = (session?.user?.rank ?? 0) >= 7;
|
||||
let showAdmin = false;
|
||||
let showMod = false;
|
||||
if (session?.user) {
|
||||
const ctx = await getApiAdminContext();
|
||||
if (ctx) {
|
||||
showAdmin = canAccess(
|
||||
ctx.permissions,
|
||||
PERMS.ADMIN_DASHBOARD,
|
||||
ctx.session.user.rank,
|
||||
);
|
||||
showMod =
|
||||
canAccess(
|
||||
ctx.permissions,
|
||||
PERMS.MOD_DASHBOARD,
|
||||
ctx.session.user.rank,
|
||||
) ||
|
||||
canAccess(
|
||||
ctx.permissions,
|
||||
PERMS.MODERATION_VIEW,
|
||||
ctx.session.user.rank,
|
||||
) ||
|
||||
canAccess(ctx.permissions, PERMS.MOD_CFH_VIEW, ctx.session.user.rank) ||
|
||||
canAccess(ctx.permissions, PERMS.MOD_ACTIONS, ctx.session.user.rank);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<nav
|
||||
@@ -154,7 +179,20 @@ export async function Navigation({ session }: { session: Session | null }) {
|
||||
</>
|
||||
) : null}
|
||||
|
||||
{isStaff ? (
|
||||
{showMod ? (
|
||||
<Link href="/mod" className="nav-item">
|
||||
<Image
|
||||
src="/assets/images/icons/navigation/home.png"
|
||||
alt=""
|
||||
width={20}
|
||||
height={20}
|
||||
className="mr-1.5"
|
||||
/>
|
||||
{t("mod")}
|
||||
</Link>
|
||||
) : null}
|
||||
|
||||
{showAdmin ? (
|
||||
<Link href="/admin" className="nav-item">
|
||||
<Image
|
||||
src="/assets/images/icons/navigation/home.png"
|
||||
@@ -298,7 +336,20 @@ export async function Navigation({ session }: { session: Session | null }) {
|
||||
</>
|
||||
) : null}
|
||||
|
||||
{isStaff ? (
|
||||
{showMod ? (
|
||||
<Link href="/mod" className="nav-item">
|
||||
<Image
|
||||
src="/assets/images/icons/navigation/home.png"
|
||||
alt=""
|
||||
width={20}
|
||||
height={20}
|
||||
className="mr-1.5"
|
||||
/>
|
||||
{t("mod")}
|
||||
</Link>
|
||||
) : null}
|
||||
|
||||
{showAdmin ? (
|
||||
<Link href="/admin" className="nav-item">
|
||||
<Image
|
||||
src="/assets/images/icons/navigation/home.png"
|
||||
|
||||
Reference in new issue
Block a user