セッション開始:2026/06/02 11:10
現状、組織単位の機能ON/OFF(機能フラグ)は「3D間取り」のみで、システム管理画面の組織詳細ページから切り替えられる。
これと同様に、「ユーザー管理」機能も組織単位でON/OFFできるようにする。
OFFにした組織では、組織管理画面のヘッダーから「ユーザー」ナビを消し、
/users 配下へ直接アクセスしても利用不可画面を表示する。
やること
isUserManagementAvailable(既定 true)を追加/users/layout.tsx でガードし、OFF時は利用不可画面を表示やらないこと
| フラグキー | isUserManagementAvailable(肯定形。3D間取りの isSolidFloorPlanAvailable と命名の向きを揃える) |
| 既定値 | true(ON)。この項目のみ z.boolean().default(true).optional()。既存組織は未設定でもONとして扱われる(オプトアウト型) |
| 設定UI | system-manager 組織詳細 /organizations/[organizationId] にトグルボタン。3D間取りと同じくクリック→確認ダイアログ→更新のUX |
| OFF時:ナビ | organization-manager ヘッダーの「ユーザー」ナビを非表示 |
| OFF時:ページ | /users 配下(一覧・追加・詳細・編集)すべてを /users/layout.tsx で一括ガードし、利用不可画面を表示 |
| ガード範囲 | ページ表示のガードのみ。サーバーアクションでのフラグ検証は行わない |
| 利用不可画面 | user 側 FeatureUnavailable に倣い organization-manager に新設。文言は対象が分かる表現(例「ユーザー管理機能は利用できません」) |
| フラグ取得元 | auth() → session.user.organization.featureFlags(既存の取得経路を流用) |
3D間取り
この組織で3D間取り機能を利用可能にする
ユーザー管理 本セッションで追加
この組織でユーザー管理機能を利用可能にする(既定:ON)
※ ON(既定)の組織では従来通り「ユーザー」ナビが表示され、/users も通常表示される。
利用不可画面の最終的なアイコン・文言は、organization-manager の既存トーンに合わせて調整する。
packages/database/lib/organization/feature-flags.ts
featureFlagsSchema に
isUserManagementAvailable: z.boolean().default(true).optional() を追加。
apps/system-manager/app/organizations/[organizationId]/_components/organization-feature-flag-is-user-management-available-switch-button/index.tsx
3D間取り用トグル(...-is-solid-floor-plan-available-switch-button)に倣ったトグルボタン。確認ダイアログ付き。
apps/system-manager/app/organizations/[organizationId]/page.tsx
追加したトグルボタンを配置し、featureFlags.isUserManagementAvailable を渡す。
apps/system-manager/actions/organization/update-organization.ts
isUserManagementAvailable が渡された場合に featureFlags へ反映する分岐を追加。
apps/organization-manager/app/_components/header-navigation/index.tsx
isUserManagementAvailable が false のとき「ユーザー」NavigationButton を表示しない。
apps/organization-manager/app/users/layout.tsx
auth() で組織の featureFlags を取得し、OFF なら利用不可画面を返す(/users 配下を一括ガード)。
apps/organization-manager/components/error/feature-unavailable/index.tsx
user 側 FeatureUnavailable に倣った利用不可画面コンポーネント(パスは既存構成に合わせて調整)。
default(true) とし、JSON未設定の既存組織もONになることを担保する。3D間取りと既定値の向きが逆になる点に注意。/users/layout.tsx は auth() を呼んでいない。ガード追加にあたり featureFlags 取得のため auth() 呼び出しを追加する。