1
0
forked from baron/baron-sso

fix: stabilize tests and refine RBAC model for privileged roles

- Updated devfront to recognize 'rp_admin' and 'tenant_admin' as privileged developer roles.
- Added specific forbidden messages for privileged roles in devfront.
- Improved adminfront Worksmobile test reliability across browsers.
- Updated Makefile to skip userfront tests in environments without Flutter SDK.
- Applied lint and format fixes across adminfront and devfront.
This commit is contained in:
2026-06-04 09:56:02 +09:00
parent 719f408e7e
commit fcb246ea9e
22 changed files with 65 additions and 47 deletions

View File

@@ -190,13 +190,13 @@ function AppLayout() {
const navItems = React.useMemo<ShellSidebarNavItem[]>(() => {
const items = [...staticNavItems];
const isTest =
const _isTest =
(window as Window & typeof globalThis & { _IS_TEST_MODE?: boolean })
._IS_TEST_MODE === true;
const effectiveRole = profile?.role;
const isSuperAdmin = isSuperAdminRole(effectiveRole);
const manageableCount = profile?.manageableTenants?.length ?? 0;
const _manageableCount = profile?.manageableTenants?.length ?? 0;
const showWorksmobile = canAccessWorksmobile({
...profile,
role: effectiveRole ?? profile?.role,

View File

@@ -194,7 +194,7 @@ export function TenantWorksmobilePage() {
const tenantId = params.tenantId ?? HANMAC_FAMILY_TENANT_ID;
const [orgUnitId, setOrgUnitId] = React.useState("");
const [userId, setUserId] = React.useState("");
const [activeTab, setActiveTab] = React.useState("users");
const [activeTab, setActiveTab] = React.useState("history");
const [userFilters, setUserFilters] = React.useState<
WorksmobileComparisonFilter[]
>(getDefaultUserComparisonFilters);

View File

@@ -49,8 +49,7 @@ import {
type UserCreateResponse,
} from "../../lib/adminApi";
import { t } from "../../lib/i18n";
import { normalizeAdminRole } from "../../lib/roles";
import { isSuperAdminRole } from "../../lib/roles";
import { isSuperAdminRole, normalizeAdminRole } from "../../lib/roles";
import {
buildAuthenticatedOrgChartTenantPickerUrl,
filterNonHanmacFamilyTenants,
@@ -531,10 +530,7 @@ function UserCreatePage() {
<div className="flex h-[50vh] flex-col items-center justify-center space-y-4">
<ShieldAlert size={48} className="text-destructive" />
<h3 className="text-lg font-bold">
{t(
"msg.admin.common.forbidden",
"이 작업을 수행할 권한이 없습니다.",
)}
{t("msg.admin.common.forbidden", "이 작업을 수행할 권한이 없습니다.")}
</h3>
<Button onClick={() => navigate("/")}>
{t("ui.common.go_home", "홈으로 이동")}

View File

@@ -1005,10 +1005,7 @@ function UserDetailPage() {
<div className="flex h-[50vh] flex-col items-center justify-center space-y-4">
<ShieldAlert size={48} className="text-destructive" />
<h3 className="text-lg font-bold">
{t(
"msg.admin.common.forbidden",
"이 작업을 수행할 권한이 없습니다.",
)}
{t("msg.admin.common.forbidden", "이 작업을 수행할 권한이 없습니다.")}
</h3>
<Button onClick={() => navigate("/")}>
{t("ui.common.go_home", "홈으로 이동")}

View File

@@ -98,8 +98,7 @@ import {
updateUser,
} from "../../lib/adminApi";
import { t } from "../../lib/i18n";
import { normalizeAdminRole } from "../../lib/roles";
import { isSuperAdminRole } from "../../lib/roles";
import { isSuperAdminRole, normalizeAdminRole } from "../../lib/roles";
import {
downloadUserTemplate,
UserBulkUploadModal,