監査法人向け工数管理システム
監査法人向けのプロジェクト・工数管理 · ゼロから単独で開発
更新日
導入前
顧客、プロジェクト、工数が一か所に集まり、社内の誰もがすべてを閲覧・変更できました。
導入後
87
権限チェックボックスをデプロイのたびにデータベースで検証。何もしない30個は非表示にしました。
- 1人:オーナー
顧客・プロジェクト・工数・レポートの領域ごとに、閲覧・作成・編集・削除をチェックしてロールを作ります。
- 2人:社員
顧客、プロジェクト、タスクに工数を記録するか、休暇を登録します。
ソフトウェア:Webアプリ締め切り前に工数が空の人へリマインドを送ります。
- 3人:プロジェクト管理者
自分のプロジェクトチームの週次タイムシートを承認または差し戻します。
- 4ソフトウェア:データベース
ロールが許す範囲だけを表示します。社員は自分の工数、プロジェクト管理者はチーム、オーナーはすべての顧客が対象です。
- 5人:オーナー
ダッシュボードとレポートで、顧客・プロジェクト・担当者別の工数を確認します。
常時動作
- 以前は、社内の誰もがすべての顧客と全員の工数を開けました。現在は、画面から要求されても、ロールが許さないものはデータベースが拒否します。
- プッシュの前に、すべてのロールをデータベースの分離したコピーでテストします。
課題
ある監査法人では、顧客・プロジェクト・社員の工数を一つのツールで管理しており、誰でもすべての顧客と全員の工数を開けました。
原因の分析
アクセス制御は画面側にあると、気づかないうちに破綻します。そのためルールはすべてデータベースに置き、テストで証明する必要がありました。
検討した選択肢
ロールごとに見えるデータが違います。アクセスルールはどこに置きますか?
採用
データベース自体に置き、デプロイのたびに全ロールをテストする
データベースが拒否するものは、画面から漏れません。代償は、プッシュのたびに分離したコピーでテストすることです。
不採用
画面側だけに置く
画面が隠すつもりだったデータを、閲覧や変更できてしまうおそれがありました。
不要になったレコードは、削除しますか、残しますか?
採用
アーカイブして匿名化する
工数の履歴がそのまま残ります。
不採用
削除する
削除すると、連鎖して工数の履歴まで消えてしまいます。
ソリューション
マネージドPostgres上のシングルページWebアプリです。アクセスルールはすべてデータベースにあり、デプロイのたびに自動のロールマトリクスで検証します。
- アプリ
- React
- Vite
- TanStack Router
- TanStack Query
- shadcn/ui
- Chart.js
- データとセキュリティ
- Supabase
- PostgreSQL row-level security
- Edge Functions (Deno)
- ホスティング
- Cloudflare
- 品質
- GitHub Actions
- Role-matrix tests
- Vitest
- Property-based tests
- Accessibility tests
関連するサービス
数値: ロールの自動チェック、2026-09-25