도메인 기반 디자인의 원칙을 파악하려는 작은 응용 프로그램을 만들고 있습니다. 성공하면 더 큰 프로젝트의 파일럿이 될 수 있습니다. Vaughn Vernon의 "도메인 기반 디자인 구현"책을 따라 가면서 유사하고 간단한 토론 포럼을 구현하려고합니다. 또한 github에서 IDDD 샘플을 확인했습니다. 본인의 사례에 대한 신원 및 액세스를 채택하는 데 어려움이 있습니다. 몇 가지 배경 정보를 제공하겠습니다.
- 필자는 사용자와 권한 논리를 분리하는 이유를 뒷받침합니다. 지원 도메인이며 다른 경계 컨텍스트입니다.
- 핵심 도메인에는 사용자, 작성자, 중재자 등이 없습니다. 서비스를 사용하여 ID 및 액세스 컨텍스트에 도달 한 후 수신 된 사용자 오브젝트를 중재자로 변환하여 작성됩니다.
도메인 작업은 관련 역할을 매개 변수로 사용하여 호출됩니다. 예 :
ModeratePost( ..., moderator);
도메인 객체의 메서드는 지정된 중재자 인스턴스가 null이 아닌지 확인합니다 (ID 및 액세스 컨텍스트에서 요청한 사용자에게 중재자 역할이없는 경우 중재자 인스턴스는 null 임).
어떤 경우에는 게시물을 변경하기 전에 추가 검사를 수행합니다.
if (forum.IsModeratedby(moderator))
내 질문은 :
후자의 경우 보안 문제가 핵심 영역에 다시 혼합되지 않습니까? 이전에는이 책에 "제목을 게시 할 수있는 사람 또는 허용되는 조건하에있는 사람이 있습니다. 포럼은 저자가 지금 그 일을하고 있음을 알아야합니다".
이 책의 역할 기반 구현은 매우 간단합니다. 중재자가 핵심 도메인 인 경우 현재 userId를 필요한 경우 중재자 인스턴스 또는 작성자로 변환하려고합니다. 서비스는 적절한 인스턴스로 응답하거나 사용자에게 필요한 역할이 없으면 널입니다. 그러나이를보다 복잡한 보안 모델에 어떻게 적용 할 수 있는지 알 수 없습니다. 현재 파일럿하려는 프로젝트에는 그룹, ACL 등이있는 다소 복잡한 모델이 있습니다.
"소유자 나 편집자 만 게시물을 편집해야합니다"와 같이 매우 복잡하지 않은 규칙이 있더라도이 방법은 고장 나거나 적어도 그것을 구현하는 올바른 방법이 보이지 않습니다.
OwnerOrEditor 인스턴스에 대한 Identity 및 Access 컨텍스트를 요청하는 것이 옳지 않다고 생각하며 핵심 도메인에서 점점 더 많은 보안 관련 클래스로 끝날 것입니다. 또한 userId뿐만 아니라 보호 된 리소스의 식별자 (게시물, 포럼 등의 ID)를 보안 컨텍스트에 전달해야합니다.이 컨텍스트는 신경 쓰지 않아야합니다 (정확합니까? )
핵심 도메인에 대한 권한을 가져 와서 도메인 객체의 방법이나 서비스에서 확인함으로써 보안 문제를 도메인과 혼합하는 것입니다.
보안 및 권한이 핵심 도메인 자체가 아닌 한 이러한 권한 관련 사항이 핵심 도메인의 일부가되어서는 안된다는 것을 읽었습니다. 위에 주어진 것과 같은 간단한 규칙이 보안을 핵심 도메인의 일부로 만드는 것을 정당화합니까?
HasPermissionToEdit(userId, resourceId)
있지만 이러한 호출로 도메인 논리를 오염시키는 것은 옳지 않습니다. 아마도 도메인 논리를 호출하기 전에 응용 프로그램 서비스 방법에서 이것들을 확인해야합니까?
UserService @AccessControlList[inf3rno]
링크 된 답변 과 같은 코드 부분에서 분명하다고 생각했습니다 .