コンテンツにスキップ

役割・権限

位置づけ: 新CRM全体設計

先行リリース第1弾(催事・アイテム・商社(卸))の権限は、社内4ロール・外部3ロールの計7ロールで構成するRBAC(ロールベースアクセス制御)で管理する。実装の正本は crm_app/app/src/lib/permissions.ts であり、画面(nav)単位の表示制御と、列・操作単位の可否関数(canSeeCost等)の2層で権限を判定する。

顧客/商談CRM・見積・KPI予実領域の権限(所属・権限スコープ4段・職能ロールの3軸設計)は 役割・権限(全体設計) が扱う。本ページはそのうち先行リリース範囲で実装済みの lib/permissions.ts を対象とする。決定事項の正本は 定例会ログ であり、両者に差異がある場合は定例会ログを優先する。

対象は催事・アイテム(商品マスタ)・商社(卸)の3モジュール。顧客/商談CRM・見積・KPI予実の権限は対象外とし、役割・権限(全体設計) 側で扱う。フェーズ区分の詳細は スコープ・フェーズ分け を参照。

Role 型は7値。社内4ロールと外部3ロールに分かれ、「社内/代理店」の単純な2値ではない。

ロール区分想定ユーザー像主な責務
管理者社内本部・システム管理者全画面・全操作・マスタ管理
営業社内催事・案件を担当する営業案件・顧客・商談結果、催事シフト作成編集(発注・申請・架電は対象外)
事務(BO)社内バックオフィス架電・審査・書類・施工・発注・申請・卸(wholesale)・マスタまで最も広い実務範囲
発注・申請担当社内発注・申請の実務担当発注(/orders)・申請(/applications)・案件閲覧に限定
代理店外部代理店側の管理者自社経由案件と自社の催事シフト。仕切原価は非表示、提案金額は閲覧可
代理店(メンバー)外部代理店の現場スタッフ自社の催事シフト閲覧と開始/終了報告のみ
施工店外部施工パートナー担当案件の施工・チャットのみ(催事・アイテム・卸は対象外)

催事スタッフは独立ロールにせず「代理店(メンバー)」に統合する。個人スタッフはアカウント管理せず、責任者名の文字列と人数のみで管理する方針と整合させる。EventCompany.business(催事/訪販/催事・訪販)は代理店の属性でありロールではないため、権限判定には用いない。

1ユーザーが複数ロールを兼務できるかは確認事項とする。現行実装は1ユーザー=1ロール(サイドバーの表示ロール切替によるデモ運用)を前提とする。

  • テナント境界: 社内ロールは全代理店のデータを横断閲覧する。代理店ロールは eventScopeAgency() により自社(companyId/代理店名一致)にスコープする。
  • 編集権は原則社内ロールのみに付与する。外部(代理店)には催事の開始/終了報告のみを書き込み許可するadd-only型の設計とする(canManageShifts は管理者・営業・事務(BO)のみtrue)。
  • 権限の適用単位はロールベース(RBAC)とし、「画面(nav)単位の表示制御」と「列・操作単位の可否関数」の2層で構成する。
  • 仕入原価・粗利(canSeeCost)は外部ロール(代理店・代理店(メンバー)・施工店)に非公開とする。提案金額(canSeeProposal)は施工店と代理店(メンバー)のみ非公開とし、代理店は販売当事者として提案金額まで閲覧できる。社内ロール間(管理者・営業・事務(BO)・発注・申請担当)では金額の絞り込みを行わず、全員が原価を閲覧できる。
  • アイテムはフィールド単位の変更履歴(before/after)を /master-history で管理する。変更者(ユーザー紐付け)の記録はログイン実装後に対応する。
  • マスタの編集可否・催事の開始/終了報告の入力可否は、本ページの各表がUI上の想定ポリシーとして示すものであり、それを強制するロールガードは現状未実装である。useRole(表示ロール切替)は変更履歴のactor記録に使うのみで、編集操作自体をブロックする機能を持たない。実装までは運用ルール(周知手順)で統制し、ロールガードの実装は今後の対応とする。
  • 2026-07-22定例会では「代理店の管理者/メンバーは機能差ほぼ無し(枠だけ用意)」とされたが、実装段階では NAV_ALLOW(代理店=/deals/customers/chat/events/代理店(メンバー)=/eventsのみ)、visibleDealTabs(代理店=5タブ/代理店(メンバー)=3タブ)、canSeeProposal(代理店(メンバー)のみ非公開)で明確な差分が生じている。7/22時点の想定と実装の差異は確認事項とする。

案件(Deal)閲覧範囲・タブ・チャットスコープ(対象外・要点のみ)

Section titled “案件(Deal)閲覧範囲・タブ・チャットスコープ(対象外・要点のみ)”

案件(Deal)の閲覧範囲・詳細タブ・チャットルームの可視スコープは、顧客/商談CRM本体の権限であり本ページ(催事・アイテム・商社(卸)の第1弾スコープ)の対象外である。詳細・正本は 役割・権限(全体設計) に委譲する。visibleDeals / visibleDealTabs / visibleScopes はChannel(訪問販売/催事/反響/パートナー)を横断するCRM本体の権限関数であり、催事チャネルに閉じたものではない。

第1弾に関わる範囲の要点のみ以下に記す。

  • 管理者・営業・事務(BO)・発注・申請担当は全件・全8タブ(概要・タスク・アイテム・工程・契約後・申請・チャット・活動)・社内/施工店/代理店の全チャットスコープを閲覧できる。
  • 代理店は自社(代理店名一致)経由の案件のみを閲覧でき、詳細タブは概要・アイテム・工程・チャット・活動の5タブ、チャットスコープは代理店に限定される。
  • 代理店(メンバー)は /deals のnavが非公開であり、案件は催事シフト経由の情報のみ参照する。詳細タブは概要・工程・チャットの3タブに限定される。
  • 施工店は施工が開始している担当案件のみを閲覧でき、詳細タブは概要・工程・チャットの3タブ、チャットスコープは施工店に限定される。

レイアウト前提も権限とあわせて分岐する。営業・代理店・代理店(メンバー)・施工店はモバイル前提の現場ロール、管理者・事務(BO)・発注・申請担当はPC前提のコア運営ロールとする。

操作管理者営業事務(BO)発注・申請担当代理店代理店(メンバー)
シフト(EventShift)作成・編集・削除×××
開始報告(朝礼)・終了報告(現場ファネル)入力××××
ShiftStatus(予定/開始済み/終了済み/未開始/終了未報告)の手動変更××××××
自社シフト閲覧(/events×○(自社のみ)○(自社のみ)
店舗(EventStore)・代理店(EventCompany)マスタ画面の閲覧×××
上記マスタの編集××××
催事↔商談の突合結果の閲覧×××

ShiftStatusは基準時刻からの自動導出のため、どのロールも手動変更できない。店舗・代理店マスタの編集権は管理者と事務(BO)に付与する想定だが、これを強制するロールガードは未実装であり運用ルールで統制する(上記「権限モデルの基本方針」参照)。営業への編集権開放(画面自体は営業にも表示済み)は確認事項とする。内部ロールが代理店に代わって開始/終了報告を代行入力する機能は実装しておらず、対応の要否は確認事項とする。代理店(メンバー)には自社の全シフトを表示する(担当シフトのみへの絞り込みは採らない)。

アイテム(商品マスタ)モジュールの操作可否

Section titled “アイテム(商品マスタ)モジュールの操作可否”

/master-products 等のマスタ画面は管理者と事務(BO)のみに開放する。営業は /master-history(変更履歴)のみアクセスでき、発注・申請担当はアイテムマスタ関連画面に一切アクセスできない。

操作管理者営業事務(BO)発注・申請担当代理店
Product(型番/kind/maker/spec等)の画面閲覧×××
Product編集×××
在庫(潤沢/少/欠品)・納期(leadTimeDays)更新×××
周辺マスタ(Series/Supplier/Vendor/LoanCompany/Manufacturer)編集×××
変更履歴(/master-history、フィールド単位before/after)閲覧××

Series・催事は変更履歴の対象外とする(プロダクト全体仕様)。外部ロール(代理店)へのアイテム公開は第1弾では行わない(在庫・納期の代理店向け公開は将来拡張の対象)。価格は商品マスタに持たず卸金額(CRM)側で保持するため、アイテムマスタの権限は原価情報を含まず単純化されている。営業・発注・申請担当へのアイテムマスタ本体の開放範囲は確認事項とする。上表のProduct編集可否も、店舗・代理店マスタと同様にロールガード未実装のため運用ルールで統制する。

商社(卸)モジュールの操作可否と工程担当

Section titled “商社(卸)モジュールの操作可否と工程担当”

/wholesale のnav可視性は管理者と事務(BO)のみとする。営業・発注・申請担当・代理店3ロールはいずれも画面非表示とする。工程STEP単位の担当ロール紐付けは lib/permissions.ts には実装しておらず、ドメイン設計(WholesaleTask.assignee等)側の対応関係として管理する。

工程STEP想定担当掛売三社間カード前金その他
settlement(決済条件確定)経理
approval(承認番号確認)経理
prepay(前金請求入金)経理
order(商社・メーカーへ発注)発注担当
deliver(納品確認)発注担当
invoice(販売店へ請求)経理
payment(入金消込)経理

「想定担当」は実装 lib/wholesale.tsSTEP_META.assignee に準拠する自由文字列(経理/発注担当)であり、Role 型の値そのものではない。経理は事務(BO)、発注担当は発注・申請担当に対応すると想定されるが、現行ロールには /wholesale のnavアクセスがない。ロール名と画面権限の不一致は確認事項とし、発注・申請担当に /wholesale を開放するか事務(BO)に一本化するかを決める。前金(FLOW: [settlement, prepay, order, deliver])はinvoice・payment工程を持たない点に注意する(三社間・カードも請求工程invoiceを持たない)。決済区分(前金/掛売/三社間/カード/その他)ごとのSTEP_ORDER分岐はドメイン仕様として定義済みだが、権限側とは未接続である。

卸金額(WholesalePrice: 仕入価格・卸価格・反映日)の登録・編集、WholesaleTask(未対応/対応中/完了、担当者・期限・優先度)の作成・アサインは、事務(BO)・発注・申請担当・管理者に限定する設計上の想定である。ただし現行実装(lib/wholesale.ts)は発注フォーム・案件操作に認証・権限ガードを持たず、社内(VE)担当による代行入力を前提に動作する。これらの制限は未実装であり、実際のガード実装は今後の対応とする。営業への閲覧範囲開放は確認事項とする。DealerIntakeForm(販売店発注フォーム)は外部の販売店が入力し案件化される唯一の外部起点であり、代理店ロールとは別枠のアクセス経路とする。アクセス方式(認証なしフォームか専用トークンURLか)は確認事項とする。

別軸案件(元請=販売店の deals と分離、将来分社化を視野)のため、卸モジュール全体を社内でも権限で閉じられる構造にする。現状のnav絞り込みはこの方針と整合する。

画面・ナビゲーションと権限の対応

Section titled “画面・ナビゲーションと権限の対応”

NAV_ALLOW を第1弾3モジュールに絞って整理する。

画面管理者営業事務(BO)発注・申請担当代理店代理店(メンバー)施工店
/events(催事シフト)××
/events/stores, /events/companies(店舗・代理店マスタ)××××
/master-products 等(アイテムマスタ本体)×××××
/master-history(変更履歴)××××
/wholesale(商社・卸)×××××

マスタ画面はMasterScreen定型(テーブル+ドロワー+変更履歴)に統一する。編集権のないロールにはドロワーを閲覧専用で表示する。金額カラム(仕入・卸価格)は該当列自体を消す方式(canSeeCost)を採用し、マスキング表示(***)は採らない。権限外URLへの直アクセス時の挙動(404型で存在を隠すか403型で権限不足を示すか)は確認事項とする。

招待制ログインとアカウントライフサイクル

Section titled “招待制ログインとアカウントライフサイクル”

第1弾では認証基盤・招待フローは未着手であり、サイドバーの「表示ロール(デモ)」スイッチで7ロールを手動切替してデモする段階にある。

本実装では自己登録なしの完全招待制とする。管理者が社内メンバーと代理店を招待する。招待フローはメール招待→初回パスワード設定→ロール自動付与(招待時に指定)の3ステップとする。代理店の契約終了時は一括無効化し、過去の開始/終了報告データは保持する。

代理店に自社メンバー(代理店(メンバー))の招待権を付与するか、本部管理者のみが招待する一本化にするかは確認事項とする。認証基盤の選定、パスワードリセット・多要素認証・セッション有効期限などのセキュリティ要件も確認事項とする。

  • 発注・申請担当に /wholesale を開放するか、事務(BO)に一本化するか。
  • 営業・発注・申請担当へアイテムマスタ本体を開放する範囲(参照のみ/編集込み/現状維持)。
  • 卸金額(仕入原価)の社内閲覧範囲を事務(BO)・管理者限定のままとするか、営業にも開放するか。
  • 催事スタッフを将来個人アカウント化するか、責任者名+人数のまま維持するか。
  • 代理店に自社メンバーの招待権を付与するか、本部管理者のみに一本化するか。
  • 担当外STEPの操作を通知にとどめるか、ハードブロックにするか。
  • 内部ロールによる開始/終了報告の代行入力を実装するか。
  • 1ユーザーが複数ロールを兼務できるか(例: 事務(BO)と発注・申請担当)。
  • 店舗・代理店マスタの編集権を営業にも開放するか。
  • DealerIntakeFormへの外部起点アクセス方式(認証なしフォーム/専用トークンURL)。
  • 権限外URLへの直アクセス時の挙動(404型/403型)。

論点の一次情報・詳細な背景整理は 未確定事項一覧 側に展開する。本ページの一覧はそのうち催事・アイテム・商社(卸)領域の抜粋である。