本文へスキップ

監査法人向け工数管理システム

監査法人向けのプロジェクト・工数管理 · ゼロから単独で開発

更新日

導入前

顧客、プロジェクト、工数が一か所に集まり、社内の誰もがすべてを閲覧・変更できました。

導入後

87

権限チェックボックスをデプロイのたびにデータベースで検証。何もしない30個は非表示にしました。

仕組み
  1. 1人:オーナー

    顧客・プロジェクト・工数・レポートの領域ごとに、閲覧・作成・編集・削除をチェックしてロールを作ります。

  2. 2人:社員

    顧客、プロジェクト、タスクに工数を記録するか、休暇を登録します。

    ソフトウェア:Webアプリ

    締め切り前に工数が空の人へリマインドを送ります。

  3. 3人:プロジェクト管理者

    自分のプロジェクトチームの週次タイムシートを承認または差し戻します。

  4. 4ソフトウェア:データベース

    ロールが許す範囲だけを表示します。社員は自分の工数、プロジェクト管理者はチーム、オーナーはすべての顧客が対象です。

  5. 5人:オーナー

    ダッシュボードとレポートで、顧客・プロジェクト・担当者別の工数を確認します。

常時動作

  • 以前は、社内の誰もがすべての顧客と全員の工数を開けました。現在は、画面から要求されても、ロールが許さないものはデータベースが拒否します。
  • プッシュの前に、すべてのロールをデータベースの分離したコピーでテストします。

課題

ある監査法人では、顧客・プロジェクト・社員の工数を一つのツールで管理しており、誰でもすべての顧客と全員の工数を開けました。

原因の分析

アクセス制御は画面側にあると、気づかないうちに破綻します。そのためルールはすべてデータベースに置き、テストで証明する必要がありました。

検討した選択肢

  1. ロールごとに見えるデータが違います。アクセスルールはどこに置きますか?

    採用

    データベース自体に置き、デプロイのたびに全ロールをテストする

    データベースが拒否するものは、画面から漏れません。代償は、プッシュのたびに分離したコピーでテストすることです。

    • 不採用

      画面側だけに置く

      画面が隠すつもりだったデータを、閲覧や変更できてしまうおそれがありました。

  2. 不要になったレコードは、削除しますか、残しますか?

    採用

    アーカイブして匿名化する

    工数の履歴がそのまま残ります。

    • 不採用

      削除する

      削除すると、連鎖して工数の履歴まで消えてしまいます。

ソリューション

マネージド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