06. 権限一覧¶
「誰が何をできるか」の一覧です。
この表はテストと同じ内容です
(core/common/tests/test_action_permissions.py の許可リスト)。
表を直すときはテストも直してください。片方だけ変えると、
テストが落ちるか、仕様書が嘘になります。
4 種類の利用者¶
| 呼び方 | 中身 | どこから入るか |
|---|---|---|
| Gipple 管理者 | サービスの運営者 | admin.redpl.app |
| 企業アカウント | 会社全体の管理者(owner) |
{会社の識別名}.redpl.app |
| 事業所アカウント | 決まった事業所の担当者(member) |
同上 |
| スタッフ | 働く人 | 同上 |
企業アカウントと事業所アカウントは、できる操作は同じです。 違うのは見える範囲だけです。
| アカウント | 見える範囲 |
|---|---|
| 企業アカウント | 会社の全事業所(ただし画面では 1 つ選んで操作します) |
| 事業所アカウント | 割り当てられた事業所だけ |
以下の表では、この 2 つをまとめて「クライアント」と書きます。
見える範囲の決まり¶
| 利用者 | 絞られ方 |
|---|---|
| Gipple 管理者 | 絞りません。全部の会社が見えます |
| クライアント | URL で決まる会社 かつ ヘッダーで選んでいる事業所 |
| スタッフ | URL で決まる会社 かつ 自分のデータだけ |
URL の会社と、ログイン情報の中の会社が食い違うときは断ります(403)。 URL を書き換えて他の会社を見ようとする操作を止めるためです。
画面ごとの可否¶
○ = 使える、× = 使えない
| 画面 | 管理者 | クライアント | スタッフ |
|---|---|---|---|
| A-01〜A-13 管理画面すべて | ○ | × | × |
| C-01〜C-20 クライアント画面すべて | ○ | ○ | × |
| S-01〜S-10 スタッフ画面すべて | × | × | ○ |
| X-01 招待からの登録 | ○ | ○ | ○ |
| X-02 トップページ | ○ | ○ | ○ |
X-01 と X-02 はログインしていなくても開けます。
API の一覧(標準の操作)¶
| API | 管理者 | クライアント | スタッフ | 備考 |
|---|---|---|---|---|
/api/auth/login/ |
○ | ○ | ○ | ログイン前でも呼べます |
/api/auth/logout/ |
○ | ○ | ○ | |
/api/auth/me/ |
○ | ○ | ○ | 自分の情報。初回パスワード変更の前でも呼べます |
/api/auth/token/refresh/ |
○ | ○ | ○ | ログイン状態を保つ裏側の仕組み |
/api/auth/change-password/ |
○ | ○ | ○ | 自分のパスワードだけ |
/api/auth/accounts/ |
○ | × | × | アカウントの一覧・発行 |
/api/auth/accounts/{user_id}/ |
○ | × | × | |
/api/auth/accounts/{user_id}/lock/ |
○ | × | × | |
/api/auth/accounts/{user_id}/unlock/ |
○ | × | × | |
/api/auth/accounts/{user_id}/reset-password/ |
○ | × | × | |
/api/auth/accounts/{user_id}/offices/ |
○ | × | × | 所属事業所を足す |
/api/auth/accounts/{user_id}/offices/{office_id}/ |
○ | × | × | 所属事業所を外す |
/api/users/check-email/ |
○ | ○ | ○ | ログイン前でも呼べます(09 の弱点を参照) |
/api/tenants/ |
○ | ○ | × | クライアントは自分の会社だけ |
/api/tenants/{id}/ |
○ | ○ | × | 同上 |
/api/tenants/current/ |
○ | ○ | ○ | ログイン前でも呼べます。URL から会社名を出すため |
/api/tenants/lookup-corporate-number/ |
○ | ○ | × | 国税庁への問い合わせ |
/api/tenants/slug-availability/ |
○ | ○ | ○ | |
/api/tenants/{tenant_id}/memos/ ほか |
○ | × | × | メモ |
/api/tenants/{tenant_id}/alerts/ ほか |
○ | × | × | 注意 |
/api/tenants/{tenant_id}/invoices/ ほか |
○ | × | × | 請求書 |
/api/offices/ |
○ | ○ | × | |
/api/offices/{id}/ |
○ | ○ | × | |
/api/staff/ |
○ | ○ | × | スタッフからは一覧を見せません |
/api/staff/{id}/ |
○ | ○ | × | |
/api/staff/office-accesses/ |
○ | ○ | × | スタッフの事業所への所属 |
/api/staff/office-accesses/{id}/ |
○ | ○ | × | |
/api/staff/invite-links/ |
○ | ○ | × | |
/api/staff/invite-links/{id}/ |
○ | ○ | × | |
/api/staff/invite/{token}/info/ |
○ | ○ | ○ | ログイン前でも呼べます |
/api/staff/invite/{token}/check-email/ |
○ | ○ | ○ | 同上 |
/api/staff/invite/{token}/accept/ |
○ | ○ | ○ | 同上 |
/api/shift/jobs/ |
○ | ○ | × | スタッフは専用の API を使います |
/api/shift/jobs/{id}/ |
○ | ○ | × | |
/api/shift/tasks/ |
○ | ○ | × | |
/api/shift/tasks/{id}/ |
○ | ○ | × | |
/api/shift/applications/ |
○ | ○ | ○ | スタッフは自分の応募だけ |
/api/shift/applications/{id}/ |
○ | ○ | ○ | 同上 |
/api/shift/attendance/ |
○ | ○ | × | |
/api/shift/attendance/{id}/ |
○ | ○ | × | |
/api/shift/approvals/ |
○ | ○ | × | |
/api/shift/approvals/{id}/ |
○ | ○ | × | |
/api/shift/billings/ |
○ | ○ | × | |
/api/shift/billings/{id}/ |
○ | ○ | × | |
/api/shift/billing/{tenant_id}/{year}/{month}/ |
○ | ○ | × | |
/api/shift/billing/{tenant_id}/{year}/{month}/lock/ |
○ | × | × | 月次の確定は運営者だけ |
/api/shift/client/dashboard/ |
○ | ○ | × | |
/api/shift/admin/dashboard/ |
○ | × | × | |
/api/shift/reports/jobs/ |
○ | ○ | × | |
/api/shift/reports/staff/ |
○ | ○ | × | |
/api/shift/staff/jobs/ |
× | × | ○ | スタッフ専用 |
/api/shift/staff/jobs/{job_id}/ |
× | × | ○ | 同上 |
/api/shift/staff/attendance/today/ |
× | × | ○ | 同上 |
スタッフにスタッフ一覧を見せないのは、以前同じ会社の全スタッフの 氏名・電話・住所・口座情報がスタッフから見えていたためです。
追加の操作(@action)¶
一覧や詳細の読み書きではない操作です。権限の穴が空きやすい場所 なので、1 つずつ書きます。
管理者はすべて使えるため、表では省きます。
| 操作 | API | クライアント | スタッフ | 理由 |
|---|---|---|---|---|
OfficeViewSet.mine |
/api/offices/mine/ |
○ | ○ | 自分の所属事業所を引く(読むだけ) |
OfficeViewSet.suspend |
/api/offices/{id}/suspend/ |
○ | × | 事業所の停止は管理の操作 |
OfficeViewSet.reactivate |
/api/offices/{id}/reactivate/ |
○ | × | 同上 |
TenantViewSet.suspend |
/api/tenants/{id}/suspend/ |
× | × | 会社の停止は運営者だけ |
TenantViewSet.reactivate |
/api/tenants/{id}/reactivate/ |
× | × | 同上 |
StaffViewSet.me |
/api/staff/me/ |
○ | ○ | 自分の情報の参照・更新 |
StaffViewSet.me_upload_image |
/api/staff/me/upload-image/ |
○ | ○ | 自分の顔写真 |
StaffViewSet.upload_image |
/api/staff/{id}/upload-image/ |
○ | × | 事業所がスタッフの写真を登録する |
InviteLinkViewSet.send_email |
/api/staff/invite-links/{id}/send-email/ |
○ | × | 招待メールの送信 |
BusinessTaskViewSet.upload_image |
/api/shift/tasks/{id}/upload-image/ |
○ | × | 業務テンプレートの画像 |
BusinessTaskViewSet.delete_image |
/api/shift/tasks/{id}/delete-image/{image_id}/ |
○ | × | 同上 |
JobViewSet.bulk_confirm |
/api/shift/jobs/{id}/bulk-confirm/ |
○ | × | マッチングの一括確定 |
JobViewSet.duplicate |
/api/shift/jobs/{id}/duplicate/ |
○ | × | お仕事の複製 |
JobViewSet.match_candidates |
/api/shift/jobs/{id}/match-candidates/ |
○ | × | マッチングの候補を探す |
JobViewSet.send_limited_notification |
/api/shift/jobs/{id}/send-limited-notification/ |
○ | × | 限定公開の通知 |
JobViewSet.update_recruitment |
/api/shift/jobs/{id}/update-recruitment/ |
○ | × | 募集人数の変更 |
JobViewSet.visibility_scope |
/api/shift/jobs/{id}/visibility-scope/ |
○ | × | 公開範囲の設定 |
JobApplicationViewSet.confirm |
/api/shift/applications/{id}/confirm/ |
○ | × | 採否を決めるのは事業所 |
JobApplicationViewSet.reject |
/api/shift/applications/{id}/reject/ |
○ | × | 同上 |
JobApplicationViewSet.bulk_action |
/api/shift/applications/bulk-action/ |
○ | × | 一括確定・一括却下 |
JobApplicationViewSet.withdraw |
/api/shift/applications/{id}/withdraw/ |
× | ○ | 取り下げは応募した本人の操作 |
AttendanceLogViewSet.clock_in |
/api/shift/attendance/{id}/clock-in/ |
○ | ○ | 本人の打刻。事業所の代理打刻もあります |
AttendanceLogViewSet.clock_out |
/api/shift/attendance/{id}/clock-out/ |
○ | ○ | 同上 |
AttendanceLogViewSet.no_show |
/api/shift/attendance/{id}/no-show/ |
○ | × | 無断欠勤の記録は管理の操作 |
AttendanceLogViewSet.clear_no_show |
/api/shift/attendance/{id}/clear-no-show/ |
○ | × | 取り消しも同じ |
AttendanceLogViewSet.update_times |
/api/shift/attendance/{id}/update-times/ |
○ | × | 時刻の手直しは管理の操作 |
AttendanceApprovalViewSet.approve |
/api/shift/approvals/approve/ |
○ | × | 勤怠の承認 |
スタッフが使えない操作を、二重に止めている¶
上の表でスタッフが × になっている「状態を変える操作」は、 テストで名指しでも止めています。
許可リストだけで守っていると、そこを書き換えたときに静かに穴が開きます。 実際に、応募の一括確定を足したとき判定の分岐に入れ忘れ、 スタッフが自分の応募を自分で確定できる状態になっていました。
新しい操作を足すとき¶
- その操作の権限を書く
- スタッフから使ってよいなら、テストの許可リストに理由付きで足す
- 状態を変えるなら、名指しの一覧にも足す
- この章の表にも足す
「テストが落ちたから許可リストに足す」は禁止です。 先に「その人が本当に使ってよいか」を決めてください。
初回パスワード変更の扱い¶
発行されたままのパスワードの人は、ほぼすべての API が断られます
(password_change_required)。
例外は次の 4 つだけです。これを塞ぐとパスワードを変えられなくなるためです。
| API | 理由 |
|---|---|
/api/auth/change-password/ |
パスワードを変えるため |
/api/auth/me/ |
自分が誰かを知るため |
/api/auth/logout/ |
やめて出られるようにするため |
/api/auth/token/refresh/ |
変更の途中でログインが切れないため |