アクター(ユーザーロール)と権限の整理
1. ロール体系
BlackSwan は 2層のロール体系 を持つ。
1.1 ADMIN ロール(管理者)
| 項目 | 内容 |
|---|---|
| 対象タッチポイント | Admin Web(blackswan-admin-web) |
| 認証方法 | AWS Cognito グループベース認証 |
| 認証ガード | AdminAuthGuard |
| 判定基準 | Cognito の Admin グループに所属しているか |
| 主な権限 | 法人の作成・編集・削除、組織の管理 |
| RLS | bypassedPrisma() を使用(法人横断アクセス可能) |
1.2 GENERAL ロール(一般スタッフ)
| 項目 | 内容 |
|---|---|
| 対象タッチポイント | Web / iPad / iPhone |
| 認証方法 | JWT トークンベース認証(Cognito) |
| 認証ガード | AuthGuard |
| RLS | corporateIdGuardedPrisma() を使用(所属法人のデータのみ) |
GENERAL ロール内でさらに StaffRole で細分化される:
| StaffRole | 日本語名 | 説明 |
|---|---|---|
| DIRECTOR | 施設長 | 施設全体の管理責任者 |
| MANAGER | 管理者 | 管理業務の責任者 |
| SUB_MANAGER | サブ管理者 | 管理者の補佐 |
| LEADER | リーダー | チーム・グループのリーダー |
| STAFF | 一般スタッフ | 介護士、看護師等の現場スタッフ |
2. 認証フロー
2.1 GENERAL(AuthGuard)の6段階検証
2.2 ADMIN(AdminAuthGuard)の検証
3. データアクセス制御
3.1 RLS(Row Level Security)
すべての主要テーブルに corporationId カラムが存在し、RLS ポリシーで自動フィルタリング:
-- 法人隔離ポリシー
CREATE POLICY "corporation_isolation_policy" ON "Staff"
FOR ALL
USING ("corporationId" = current_setting('app.corporation_id')::uuid);
-- RLS バイパスポリシー(管理者・認証時)
CREATE POLICY "bypass_rls_policy" ON "Staff"
USING (current_setting('app.bypass_rls', TRUE)::text = 'on');
| アクセスパターン | Prisma メソッド | 用途 |
|---|---|---|
| 通常アクセス | corporateIdGuardedPrisma() | 一般スタッフの全データアクセス |
| RLS バイパス | bypassedPrisma() | 認証時、管理者操作、法人横断処理 |
3.2 StaffDisplayRangeCondition(表示範囲制御)
一般スタッフが閲覧できる利用者の範囲を制御:
| フィルタ条件 | 説明 |
|---|---|
| グループ | 所属グループの利用者のみ表示 |
| 事業所 | 所属事業所の利用者のみ表示 |
| 部門 | 所属部門の利用者のみ表示 |
| チーム | 所属チームの利用者のみ表示 |
4. アクター別タッチポイント・機能マトリクス
4.1 ADMIN(管理者)
| 機能 | Admin Web |
|---|---|
| 法人管理(CRUD) | o |
| 組織管理(CRUD) | o |
4.2 DIRECTOR / MANAGER(施設長・管理者)
| 機能カテゴリ | Web | iPad | iPhone |
|---|---|---|---|
| ケアマネジメント全機能 | o | - | - |
| 契約管理 | o | - | - |
| 組織・スタッフ管理 | o | - | - |
| LIFE 連携・データ出力 | o | - | - |
| 事故報告・ヒヤリハット | o | - | - |
| 選択肢マスタ・テンプレート管理 | o | - | - |
| 利用者管理(全操作) | o | - | - |
| 記録入力 | - | o | o |
| 申し送り | o | o | o |
| サマリーボード | - | o | o |
4.3 SUB_MANAGER / LEADER(サブ管理者・リーダー)
| 機能カテゴリ | Web | iPad | iPhone |
|---|---|---|---|
| ケアマネジメント | o | - | - |
| 契約管理 | o | - | - |
| 利用者管理 | o | - | - |
| 記録入力 | - | o | o |
| 申し送り | o | o | o |
| サマリーボード | - | o | o |
4.4 STAFF(一般スタッフ)
| 機能カテゴリ | Web | iPad | iPhone |
|---|---|---|---|
| 記録入力 | - | o | o |
| 申し送り閲覧・作成 | o | o | o |
| サマリーボード閲覧 | - | o | o |
| プロフィール編集 | o | - | - |
| マイページ | - | o | - |
| 設定 | - | - | o |
5. スタッフの属性
| 属性 | 説明 | 複数可 |
|---|---|---|
| 職位(position) | 施設内での役職 | o |
| 職務(jobRole) | 担当業務の種類 | o |
| 資格(qualifications) | 保有する資格 | o |
| グループ(group) | 所属グループ | o |
| 事業所(businessOffice) | 所属事業所 | o |
| 部門(department) | 所属部門 | o |
| チーム(team) | 所属チーム | o |
| ステータス | ACTIVE / INACTIVE / RETIRED | - |
| 経験年数 | 介護・医療の経験年数 | - |
| 入職日・退職日 | 人事情報 | - |