在我的项目中,有一个用户A向用户B发送FriendRequest
的概念。在简化版本中,请求如下所示:
class FriendRequest
{
long Id;
int UserId;
int OtherUserId;
string Message;
}
在
Accept
方法中,我需要检查当前通过身份验证的用户是否等于OtherUserId
中的FriendRequest
。 currentAuthenticatedUserId
从控制器向下传递到应用程序服务。现在,问题来了,我应该在应用程序服务中还是在FriendRequest
聚合根目录中进行检查。//In application service code:
if(currentAuthenticatedUserId !=friendRequest.OtherUserId)
{
throw new FriendRequestException("Can only accept friend requests sent to you");
}
friendRequest.Accept();
与
//In application service, but we are not checking it here.
friendRequest.Accept(currentAuthenticatedUserId); //The check is done inside `FriendRequest` and the exception is also thrown there.
最佳答案
访问控制是应用程序服务的主要职责之一。
因此,请在应用程序服务中而非实体中检查用户ID。
关于domain-driven-design - 聚合根或应用程序服务中的用户权限检查?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35649163/