在我的项目中,有一个用户A向用户B发送FriendRequest的概念。在简化版本中,请求如下所示:

class FriendRequest
{
     long Id;
     int UserId;
     int OtherUserId;
     string Message;
}


Accept方法中,我需要检查当前通过身份验证的用户是否等于OtherUserId中的FriendRequestcurrentAuthenticatedUserId从控制器向下传递到应用程序服务。现在,问题来了,我应该在应用程序服务中还是在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/

10-11 02:15