InfraGuard

ナビゲーション · 役割優先メニュー

InfraGuard の役割優先・DB 駆動メニュー(infr_sitemap + min_req) — 8つの役割領域と、役割境界がそのまま権限境界になる仕組み。

概要 — 何をする画面か

InfraGuard のトップナビゲーションは 役割優先の情報アーキテクチャ(IA) です。まず 役割(業務領域)で分岐 し、その領域の 内側で 業務フローへ展開します。原則は3つあります。

  1. メニューはハードコードではなく DB 駆動です。 すべてのメニューノードは infr_sitemap テーブル(アプリが独自に所有)から読み込まれます。Blade に埋め込まれたものはありません。
  2. 役割境界=権限境界。 各ノードの min_req(最小 user_level)が そのまま アクセス制御の線になります。ノードは user_level >= min_req のときだけ表示され、同じ規則がルート側のサーバーサイドでも強制されます(多層防御)。
  3. ラベルは常に翻訳キーを経由します。 画面上のテキストは __() / Locales::menuLabel() によって8言語すべてで解決されます。

指標(CPU、ロード、5分窓 …)は トップレベルのメニュー項目ではありません — 各画面の中でエンティティタブやフィルターとして存在します。分割の軸は「どの指標か」ではなく「誰(どの役割)が何をするか」です。

InfraGuard において 「ドメイン」は Web の TLD のみ を指します(aaa.bbb.com)。担当範囲で分けた業務区分は 「役割 / 領域」 と呼びます。8つのトップレベルメニュー項目は、まさにその役割領域です。


使う場面


画面構成

メニューはトップバー(infr-topbar)に横並びで配置されます。左から右へ:

領域 内容
ブランド InfraGuard ロゴ(シールド+監視パルス)→ クリックで概要(/)へ
役割メニュー infr-nav — 8つの役割領域。ホバーでサブ項目パネルが開く
右側アクション モバイルメニュー切替 · 言語スイッチャー · テーマ切替 · ユーザーメニュー

各トップレベル項目は MDI アイコン+ラベル+(子を持つ場合)シェブロンとして描画され、子項目はドロップダウンパネル(infr-nav__panel)に表示されます。現在のパスが子の href と一致すると、トップレベル項目に is-active が付きます(概要はパスがちょうど / のときだけアクティブになります)。

8つの役割領域

SitemapSeeder が構築するトップレベルのツリーです。body_class は領域に入るときに <body> へ適用され、ページのスタイルをスコープします。

# 役割領域 担当 body_class 最小 user_level
1 概要 共通 infr-overview 1
2 インフラ インフラ運用 infr-infra 1
3 サービス サービス運用 infr-service 1
4 セキュリティ セキュリティ運用 infr-security 2
5 バックアップ・復旧 インフラ(兼任) infr-backup 2
6 資産 共通参照(CMDB) infr-asset 1
7 管理 管理者 infr-admin 10
8 開発 super_admin infr-dev 9

領域ごとのサブ項目

各サブ項目は自身の min_req を持ちます(通常は親と同じですが、引き上げられている場合もあります)。

インフラ(min_req 1)

項目 パス min_req
ヘルス /infra/health 1
サーバー /infra/servers 1
ストレージ・RAID /infra/storage 1
ポート接続 /infra/traffic/ports 1
IP接続 /infra/traffic/ips 1
トラフィック /infra/traffic/net 1
警報 /infra/alert 1

サービス(min_req 1)

項目 パス min_req
概要 /service 1
Web /service/web 1
データベース /service/database 1
セッション /service/session 1
カタログ /service/catalog 1
プロジェクト /service/projects 1
問題解決 /service/resolution 2

セキュリティ(min_req 2 — 全項目 2)

項目 パス
概要 /security
脅威 /security/threats
検知 /security/detections
ルールセット /security/rulesets
ファイアウォール /security/firewall
ブロックリスト・評判 /security/blocklist
ホワイトリスト /security/whitelist
セキュリティ診断 /security/diagnostics
問題解決 /security/resolution

バックアップ・復旧(min_req 2): スケジュールボード /backup/board · バックアップスクリプト /backup/scripts · 保管庫 /backup/vaults · 復旧・検証 /backup/recovery。

資産(min_req 1): インベントリ /asset/inventory · インスタンス /asset/instances · ハードウェア /asset/hardware · ストレージ・ファイル /asset/storage。

管理(min_req 10 — 全項目 10): ユーザー・権限 /admin/users · コレクター /admin/collectors · 運用ポリシー /admin/ops-policy · APIキー /admin/api-keys · ルール・しきい値 /admin/rules · 評判API /admin/reputation-providers · AIアダプター /admin/ai-providers · メールアダプター /admin/mail-providers · SMSアダプター /admin/sms-providers · 多言語設定 /admin/localization · 監査 /admin/audit。

開発(min_req 9 — 全項目 9): Dev Overview /dev · Doctor /dev/doctor · Runtime & Leader /dev/leader · Slow Queries/Requests/Jobs/Outgoing · Exceptions · Cache · Servers · Usage · Pulse /pulse · Horizon /horizon。


使い方

メニューをたどる

トップレベル項目にホバーするとパネルが開きます。項目をクリックすると画面へ遷移し、その領域の body_class が <body> に適用されます。画面幅が狭いときは、右上のハンバーガー(data-nav-toggle)でメニューを展開します。

自分のレベルで見えるもの

ログイン時に InfrAuth ミドルウェアが users.user_level をセッションキー infr_user_level に同期します。描画時には Menu::for_user($level) がツリーをたどり、min_req > your level に当てはまるノードを 再帰的に隠します。例:

開発(9)と管理(10)はしきい値が異なります。ちょうどレベル9の super_admin は開発は見えますが管理は見えません。管理者(10)は両方見えます。

メニューの追加・再構成(管理者・開発者)

メニュー編集の UI はまだありません。ツリーの正本はコード(database/seeders/SitemapSeeder.php)であり、シーダーは実行のたびに 全行を削除して作り直します(正本の再同期)。

# ツリーを編集したら再同期します(infr_sitemap のみ変更 — レガシーデータは安全です)
php artisan db:seed --class=SitemapSeeder

シーダーは最後に Menu::flush() を呼ぶため、変更は即座に反映されます。新しい項目が生の(英語の)名前で表示される場合は、翻訳キーがありません。Str::slug(name, '_') の規則に従って resources/lang/{ko,en}/menu.php に追加してください(例: Storage & RAID → storage_raid)。

migrate:fresh は絶対に実行しないでください。InfraGuard はレガシーの stats-design MySQL と接続を共有しています。メニューだけを更新するには、db:seed --class=SitemapSeeder のみを使用してください。


データソース

infr_sitemap テーブル

アプリが独自に所有する独立したテーブルです(レガシーの接頭辞なし sitemap とは別物)。モデル: App\Models\Infr\InfrSitemap。

カラム 意味
parent_id 0 = トップレベル、それ以外は親ノードの id
seq 兄弟間の並び順
depth 0 = 役割領域、1 = サブ項目
name 生の名前(ラベルキーの元)
href リンク先パス(# = リンクしない親)
icon MDI グリフ(例: mdi-server)
body_class トップレベルのみ — 遷移時の <body> クラス
is_view 1 でツリーに含める
min_req 最小 user_level(権限境界)

App\Support\Menu — ツリー構築+キャッシュ

キャッシュが保持するのは 生の name であり、翻訳は描画時に Locales::menuLabel() で行われます。したがって 言語を切り替えてもキャッシュのフラッシュは不要です。 逆に、ノードの追加や名称変更には再シード(フラッシュを伴う)が必要です。

ラベルの翻訳

App\Support\Locales::menuLabel($name) は menu. + Str::slug($name, '_') というキーを引きます。キーが存在すれば翻訳し、なければ生の名前を返します(安全なフォールバック)。パックは resources/lang/{locale}/menu.php にあります。

// 描画側(nav.blade.php)
{{ \App\Support\Locales::menuLabel($top['name']) }}
// "Storage & RAID" → __('menu.storage_raid') → "Storage & RAID" (en) / "ストレージ・RAID" (ja)

セッションとミドルウェア


アクセス権限

レベル(user_level) 別名 メニューでの表示範囲
1 demo/viewer 概要 · インフラ · サービス · 資産(ほぼ閲覧のみ)
5 staff + セキュリティ · バックアップ・復旧
9 super_admin + 開発
10 admin + 管理(および開発)

レベルの定義は RBAC レベル を、役割・チームの管理は 役割とチーム を参照してください。


トラブルシューティング・FAQ

メニュー項目が見当たりません。 たいていはレベル不足です。自分の user_level がそのノードの min_req 以上かを確認してください(上の表を参照)。管理者は ユーザーとチーム でレベルを調整します。

追加したばかりのメニュー項目が英語の(生の)名前で表示されます。 menu.php パックに翻訳キーがありません。Str::slug(name,'_') の規則に従って resources/lang/ko/menu.php と en/menu.php の両方に追加してください。キーがなくても、画面は生の名前のまま安全に動作します。

シーダーを実行したのにメニューが変わりません。 キャッシュが古い可能性があります。シーダーは最後に Menu::flush() を呼びますが、php artisan cache:clear を試すこともできます。Redis が停止している場合、Menu はリクエストごとに build() へフォールバックするため、キャッシュが原因ではありえません。

言語を切り替えたのに、メニューのラベルだけが変わりません。 ラベルは描画時に解決され、キャッシュされません。対象言語の menu.php にキーがあるか確認してください。なければ、多言語設定 ページで有効化・翻訳の状況を確認します。

隠れている画面に URL を直接入力して到達できますか? いいえ。メニューが隠れていても、ルートのミドルウェア(infr.level:N など)がサーバーサイドで 403 を返します。


関連項目

역할별로 묶인 상단 내비게이션
역할별로 묶인 상단 내비게이션
오른쪽 끝 계정 메뉴
오른쪽 끝 계정 메뉴