2012-06-21 5 views
2

CQRS 패턴을 사용하는 ASP.NET MVC3에서 응용 프로그램을 개발 중입니다. 명령 측면은 Entity Framework로 만들어지며 엔티티는 SQL Server의 테이블에 매핑됩니다. 쿼리 측면은 SQL 뷰 (EF도 사용) 위에 구축됩니다.CQRS 읽기 모델의 액세스 규칙

데이터 액세스를 어떻게 관리해야합니까? 예를 들어 문서가 있습니다. 문서는 암호로 보호되고이를 아는 사람이 액세스 할 수 있거나 로그인 한 사용자 만 액세스 할 수 있습니다.

어디에서 액세스 허용/거부 논리를 구현해야합니까? DocumentViewModel에 어떤 데이터가 포함되어야합니까? 사용자가 제공 한 암호와 비교할 암호 필드가 있어야하므로 액세스를 확인하고 단일 쿼리에 표시 할 데이터를 얻을 수 있습니까? 또는 UI에 표시되는 필드 만 포함해야합니까? 그러면 별도의 쿼리 (또는 저장 프로 시저 호출)가 액세스 확인을 담당하게됩니까?

비밀번호를 확인하는 것보다 액세스 규칙이 더 복잡하다면 - 모든 화이트리스트, 블랙리스트, 지불, 이전 한도, 계정 유형 등이 포함될 수 있습니다. 일반적으로 - 아주 멀리 자주 읽고 '좋은'시나리오의 예에서 보여됩니다

SELECT * FROM ReadModelTable WHERE id = @id 

에서 일.

+1

사용자는 ** 인증을해야합니다 ** 몇 가지 전략을 선택할 수 있지만 일반적으로 사용자 이름/비밀번호가 필요합니다. 그 후에 ** 승인 **을 처리하고 있습니다. 항상이 두 가지 책임을 분리하는 데 도움이됩니다. 그러나 귀하의 질문은 어디에서 도움을 줘야할지 모호합니다. 사양은 움직이는 표적 인 것처럼 보이며 지금까지 무엇을 얻었는지 (그리고 기본 또는 고급 지원이 필요한지) 명확하지 않습니다. –

+0

현재 사양에는 문서에 대한 액세스를 보호하는 2 가지 전략 (승인)이 필요합니다. 문서 자체 또는 사용자 액세스 목록과 관련된 일반 암호가 필요합니다. 아니면 둘다. 인증은 MembershipProviders를 사용하여 구현되며 도메인 모델의 범위 밖에 있습니다. – Pein

+0

글쎄,이 특정 예제와 관련된 대답을 원하지 않지만 CQRS의 복잡한 (그리고 가능성이있는) 인증 시나리오를 처리하기위한 일반적인 패턴이 필요합니다. – Pein

답변

1

Episode 28 of Being the Worst (Podcast)에는 CQRS를 사용하는 시스템에 대한 인증 및 인증에 대한 몇 가지 흥미로운 점이 있습니다. 나는 종종 다른 사람들의 말을 듣고 이론적 인 시스템 아키텍처를 핵심 도메인 외부의 관심사로 삼아 인증을 고려했습니다. 반면에 권한 부여는 핵심 도메인 내에 요소를 가질 수 있지만 많은 시스템에서 다소 문제를 야기하는 것처럼 보입니다.

예를 들어, 어떤 유형의 문서를 처리 할 때 각각 별도의 사용자 이름과 암호가 필요한 곳에 집계하면 제안이 효과가 있지만 일반적인 구현처럼 들리지는 않습니다. 주요 실패 포인트는 문서와 함께있는 자격 증명이며 보안 문제로 향후에 문제가되는 단일 사용자의 액세스 권한을 취소하게하는 사용자간에 공유되는 것으로 추정됩니다. 각 구성원이 비밀 암호를 알아야하는 비밀 클럽처럼 생각하십시오. 암호가 변경되지 않으면 누군가가 클럽에서 퇴장하거나 실수로 의도하지 않은 상대방과 암호를 공유 할 때 문제가 발생합니다.

+1

저는 그 문제에 대해 완전히 알고 있습니다. 그래서 그것이 대안 중 하나 일뿐입니다. 이 공유 암호 전략은 사용자가 제안 된 디자인/프로젝트/문서를 검토하기 위해 임시 작업 그룹을 신속하게 만들려는 시나리오를위한 것입니다. 오래 지속되는 것은 없습니다. – Pein

+0

이 경우 ad-hoc 작업 그룹 암호는 도메인 자체와 관련된 비즈니스 관심사처럼 들립니다. 이 외의 다른 점은 암호 저장 및 암호 비교를 통해 더 나은 보안을 위해 암호 해시를 사용하는 것이 당연하다는 것입니다.액세스 영역 논리를 어디에 두어야하는지에 관해서는 암호 자체와 같은 소리가 해당 문서 엔티티와 관련된 명령이나 쿼리의 일부가 될 수 있으며 논리는 해당 처리기에 배치 될 수 있습니다. – jpierson