😽

ドメインの権限管理が適切に適用されているか?

に公開

ドメインの権限管理が適切に設計されているか?

背景・概要

業務において誰が何をできるか/できないかは重要な制約事項であり、実装の初期から考慮しておかないと後のセキュリティ事故・バグ・混乱の原因となる。

ドメイン層で表現すべきか、アプリケーション層で制御すべきかの切り分けも重要


  • Task.canApprove(user: User): Boolean のような問いかけ型のメソッドは設けず、Task.approve(user: User)内で権限制御するか、複雑な場合はTaskApprovalPolicyのようなポリシードメインを作成する
  • ロールや権限はEnum/DB/sealed interfaceなどで管理し、表示・ユーザー操作の制御は画面やAPIで行う
  • 各ユースケース(ApplicationService)では権限チェックを明示的に記述して曖昧さを排除する

よくある失敗例

  • 「一部の画面では表示されるが、操作はできない」など中途半端な制御になる
  • フロント側でしか制御されておらず、APIを直接叩けば何でもできてしまう状態
  • 権限制御がコードベースのあちこちに散らばっており、ロール追加や変更時にミスが頻発

FAQ

Q. 権限チェックはユースケースかドメインか?

A. ケースバイケース。ドメインでは「このデータに対して誰が何をできるか」を制御し、ユースケースでは「業務上その操作が可能か」を判断するのが無難と思われる

Q. 権限のソースはEnumかDBかどこにおく?

A. 小規模ならEnum、大規模ならDBやStrategy(Policy)パターンを使って柔軟に実装できる


関連観点


📘 本記事は SaaS設計レビュー観点チェックリスト(2025年版) の一部です。

設計観点カテゴリ:🏷️ドメイン
レベル:Structure(構造・原則・責務整理レベル)
推奨読者:設計初心者 / 設計中のチーム / レビュワー

🧭 他の観点もまとめて読みたい方はこちらからどうぞ。

Discussion