little-hands/ddd-q-and-a

長文で失礼しますが、よろしければ教えていただけますと嬉しいです!権限の確認はユースケース層・ドメイン層のどちらの知識として実装すればよいのか悩んでいます。例としてプロジェクト管理アプリがあったとします。エンティティはUser/Project...

Opened this issue · 0 comments

Question

長文で失礼しますが、よろしければ教えていただけますと嬉しいです!

権限の確認はユースケース層・ドメイン層のどちらの知識として実装すればよいのか悩んでいます。

例としてプロジェクト管理アプリがあったとします。エンティティはUser/Project/Task/Tagです。

ProjectにUserがマネージャーかメンバー権限でアサインされている状態です。そこで、Projectへ新しいメンバーを追加することやTagを作成することは、マネージャー権限のみで可能であった場合にユースケースとドメインどちらの知識になるのでしょうか?

メンバー追加をproject.AssignMember(userSession, ...)のように実装しましたが、タスク作成の際にも同様にnew task(userSession, ...)とするのはなにか違和感があります。

また、userSessionはユースケース層に置くとQA本で書かれていますが、userSessionをドメイン層に置くことはあまりないでしょうか?

お忙しいところ恐縮ですが、よろしくお願いします!

Answer

権限は迷います、なぜかというとアプリケーションがなくても存在するドメインのルールのようでもあり、
アプリケーション上の操作制御の問題でもあるためです。個人的にはどちらとも解釈できるので、絶対こちら!という答えは定められないように思っています。
UserSessionはユースケース層に置くと書きましたが、権限制御がドメイン層のものと考えるとドメイン層に置くこともアリだと思います。