1
0
forked from baron/baron-sso

devfront biome 오류 수정

This commit is contained in:
2026-06-09 17:52:55 +09:00
parent b919f600e1
commit 2234986abd
6 changed files with 36 additions and 29 deletions

View File

@@ -9,8 +9,8 @@ import ClientDetailsPage from "../features/clients/ClientDetailsPage";
import ClientGeneralPage from "../features/clients/ClientGeneralPage"; import ClientGeneralPage from "../features/clients/ClientGeneralPage";
import ClientRelationsPage from "../features/clients/ClientRelationsPage"; import ClientRelationsPage from "../features/clients/ClientRelationsPage";
import ClientsPage from "../features/clients/ClientsPage"; import ClientsPage from "../features/clients/ClientsPage";
import DeveloperRequestPage from "../features/developer-request/DeveloperRequestPage";
import DeveloperGrantsPage from "../features/developer-grants/DeveloperGrantsPage"; import DeveloperGrantsPage from "../features/developer-grants/DeveloperGrantsPage";
import DeveloperRequestPage from "../features/developer-request/DeveloperRequestPage";
import GlobalOverviewPage from "../features/overview/GlobalOverviewPage"; import GlobalOverviewPage from "../features/overview/GlobalOverviewPage";
import ProfilePage from "../features/profile/ProfilePage"; import ProfilePage from "../features/profile/ProfilePage";
import { DEVFRONT_AUTH_CALLBACK_PATH } from "../lib/authConfig"; import { DEVFRONT_AUTH_CALLBACK_PATH } from "../lib/authConfig";

View File

@@ -2,9 +2,9 @@ import { useQuery } from "@tanstack/react-query";
import { import {
ChevronDown, ChevronDown,
ClipboardCheck, ClipboardCheck,
KeyRound,
LayoutDashboard, LayoutDashboard,
LogOut, LogOut,
KeyRound,
Moon, Moon,
NotebookTabs, NotebookTabs,
ShieldHalf, ShieldHalf,
@@ -351,7 +351,8 @@ function AppLayout() {
auth.user?.profile as Record<string, unknown> | undefined, auth.user?.profile as Record<string, unknown> | undefined,
); );
const displayRoleKey = profile?.role || currentRole; const displayRoleKey = profile?.role || currentRole;
const navItems = displayRoleKey === "super_admin" const navItems =
displayRoleKey === "super_admin"
? [ ? [
...baseNavItems, ...baseNavItems,
{ {

View File

@@ -31,7 +31,9 @@ export function resolveClientCreateAccess({
return "can_create"; return "can_create";
} }
if (hasDeveloperAccessForPages(accessStatus?.approvedPages, ["client_create"])) { if (
hasDeveloperAccessForPages(accessStatus?.approvedPages, ["client_create"])
) {
return "can_create"; return "can_create";
} }

View File

@@ -35,10 +35,14 @@ describe("developer access gate", () => {
}); });
expect( expect(
resolveDeveloperAccessGate("user", { resolveDeveloperAccessGate(
"user",
{
status: "pending", status: "pending",
pendingPages: ["audit"], pendingPages: ["audit"],
}, ["audit"]), },
["audit"],
),
).toEqual({ ).toEqual({
hasDeveloperAccess: false, hasDeveloperAccess: false,
isDeveloperRequestPending: true, isDeveloperRequestPending: true,
@@ -46,10 +50,14 @@ describe("developer access gate", () => {
}); });
expect( expect(
resolveDeveloperAccessGate("user", { resolveDeveloperAccessGate(
"user",
{
status: "approved", status: "approved",
approvedPages: ["overview"], approvedPages: ["overview"],
}, ["audit"]), },
["audit"],
),
).toEqual({ ).toEqual({
hasDeveloperAccess: false, hasDeveloperAccess: false,
isDeveloperRequestPending: false, isDeveloperRequestPending: false,

View File

@@ -4,9 +4,9 @@ import {
fetchDeveloperRequestStatus, fetchDeveloperRequestStatus,
} from "../../lib/devApi"; } from "../../lib/devApi";
import { import {
type DeveloperAccessPage,
hasDeveloperAccessForPages, hasDeveloperAccessForPages,
isDeveloperRequestPendingForPages, isDeveloperRequestPendingForPages,
type DeveloperAccessPage,
} from "./developerAccessPages"; } from "./developerAccessPages";
export type DeveloperAccessGateState = { export type DeveloperAccessGateState = {
@@ -33,9 +33,7 @@ export function resolveDeveloperAccessGate(
requiredPages, requiredPages,
); );
const canRequestDeveloperAccess = const canRequestDeveloperAccess =
profileRole === "user" && profileRole === "user" && !hasDeveloperAccess && !isDeveloperRequestPending;
!hasDeveloperAccess &&
!isDeveloperRequestPending;
return { return {
hasDeveloperAccess, hasDeveloperAccess,

View File

@@ -59,9 +59,7 @@ test.describe("DevFront security and isolation", () => {
await expect(page.getByText("Server side App")).not.toBeVisible(); await expect(page.getByText("Server side App")).not.toBeVisible();
}); });
test("user can enter DevFront and sees empty RP list", async ({ test("user can enter DevFront and sees empty RP list", async ({ page }) => {
page,
}) => {
await seedAuth(page, "user"); await seedAuth(page, "user");
const state = { const state = {
clients: [] as ReturnType<typeof makeClient>[], clients: [] as ReturnType<typeof makeClient>[],