forked from baron/baron-sso
devfront biome 오류 수정
This commit is contained in:
@@ -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";
|
||||||
|
|||||||
@@ -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,
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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>[],
|
||||||
|
|||||||
Reference in New Issue
Block a user