diff --git a/adminfront/src/features/coverage/adminTenantTabs.test.tsx b/adminfront/src/features/coverage/adminTenantTabs.test.tsx
index 2ec4b09f..efa5ea33 100644
--- a/adminfront/src/features/coverage/adminTenantTabs.test.tsx
+++ b/adminfront/src/features/coverage/adminTenantTabs.test.tsx
@@ -61,7 +61,7 @@ const users = [
id: "user-owner",
name: "Owner User",
email: "owner@example.com",
- role: "tenant_admin",
+ role: "super_admin",
status: "active",
},
{
diff --git a/adminfront/src/features/tenants/routes/TenantFineGrainedPermissionsTab.tsx b/adminfront/src/features/tenants/routes/TenantFineGrainedPermissionsTab.tsx
index 779237b1..c7dc5c80 100644
--- a/adminfront/src/features/tenants/routes/TenantFineGrainedPermissionsTab.tsx
+++ b/adminfront/src/features/tenants/routes/TenantFineGrainedPermissionsTab.tsx
@@ -31,13 +31,13 @@ import {
import { toast } from "../../../components/ui/use-toast";
import {
addTenantRelation,
+ fetchMe,
fetchTenantRelations,
fetchUsers,
removeTenantRelation,
type TenantRelation,
} from "../../../lib/adminApi";
import { t } from "../../../lib/i18n";
-import { useTenantPermission } from "../hooks/useTenantPermission";
interface TenantFineGrainedPermissionsTabProps {
tenantIdProp?: string;
@@ -48,8 +48,11 @@ export function TenantFineGrainedPermissionsTab({
}: TenantFineGrainedPermissionsTabProps = {}) {
const { tenantId: tenantIdParam } = useParams<{ tenantId: string }>();
const tenantId = tenantIdProp || tenantIdParam || "";
- const { hasPermission } = useTenantPermission(tenantId);
- const isWritable = hasPermission("manage_admins");
+ const { data: profile } = useQuery({
+ queryKey: ["me"],
+ queryFn: fetchMe,
+ });
+ const isWritable = profile?.role === "super_admin";
const queryClient = useQueryClient();
const [searchTerm, setSearchTerm] = useState("");
const [isDialogOpen, setIsDialogOpen] = useState(false);
@@ -75,7 +78,13 @@ export function TenantFineGrainedPermissionsTab({
> = {};
for (const user of relationsQuery.data) {
initialMap[user.userId] = {};
- const tabs = ["profile", "permissions", "organization", "schema"];
+ const tabs = [
+ "profile",
+ "permissions",
+ "organization",
+ "schema",
+ "worksmobile",
+ ];
for (const tab of tabs) {
const isWrite = user.relations.includes(`${tab}_managers`);
const isRead = user.relations.includes(`${tab}_viewers`);
@@ -337,6 +346,12 @@ export function TenantFineGrainedPermissionsTab({
{t("ui.admin.tenants.detail.tab_schema", "사용자 스키마")}
+
+ {t(
+ "ui.admin.tenants.detail.tab_worksmobile",
+ "네이버웍스 연동",
+ )}
+
{t("ui.common.action", "작업")}
@@ -346,7 +361,7 @@ export function TenantFineGrainedPermissionsTab({
{relations.length === 0 ? (
{t(
@@ -387,6 +402,14 @@ export function TenantFineGrainedPermissionsTab({
? "read"
: "none";
+ const worksmobileVal = user.relations.includes(
+ "worksmobile_managers",
+ )
+ ? "write"
+ : user.relations.includes("worksmobile_viewers")
+ ? "read"
+ : "none";
+
const curProfileVal =
localTenantPermissions[user.userId]?.profile ??
profileVal;
@@ -398,6 +421,9 @@ export function TenantFineGrainedPermissionsTab({
organizationVal;
const curSchemaVal =
localTenantPermissions[user.userId]?.schema ?? schemaVal;
+ const curWorksmobileVal =
+ localTenantPermissions[user.userId]?.worksmobile ??
+ worksmobileVal;
return (
+
+
+