답변:
모델과 뷰에 각각 두 가지 유형의 보안 조건이있을 수 있습니다. 보기는 현재 사용자의 권한에 따라 관련 요소의 표시를 제어하지만 모델은 기본 데이터에 대한 액세스를 제어합니다. 모델에 모든 올바른 검증 / 확인이있는 한, 뷰가 부족하더라도 보안은 여전히 존재합니다.
뷰는 다른 레벨 / 역할에 따라 변경되어야하므로 일반적으로 둘 다 있어야합니다. 컨트롤러는보기를 변경하는 관련 데이터를 전송하지만,보기는 여전히 해당 데이터로 무언가를 수행하여 컨텐츠를 올바른 사용자에게 숨기거나 표시해야합니다.
그렇기 때문에 대부분의 템플릿 프레임 워크에는 조건부 요소가 있습니다 ( 핸들 바 예제).
{{#if isCurrentUserAdmin}}
....
{{/if}
따라서 적절한 부분이 올바른 한 위반이 아닙니다.
예, 아니오
실제 보안 결정이보기에 의해 결정되면 MVC를 위반 한 것입니다. 그러나 뷰가 실제 결정을 모델에 위임하면 괜찮습니다. 모델의 정보를 기반으로 어떤 요소를 표시할지 결정하는 데 아무런 문제가 없습니다.
예를 들어 "편집자"권한이있는 사용자에게만 표시되는 "편집"버튼이있는 경우보기에서 현재 사용자가 누구인지, "편집자"권한이 있는지 모델에 문의하는 것이 좋습니다. 이 정보를 사용하여 단추 표시 여부를 결정합니다. 그러나 뷰가 인증 및 권한 부여 논리 자체를 수행하려는 경우 MVC를 위반 한 것입니다.
나는 아니오 라고 말할 것이다 .
그러나 @rvcoutinho가 말한 것과 다른 이유로 (내 생각에 잘못된 느낌을주는 wikipedia를 인용했지만)
보안 비트에 대한 스위치를 가질 수 있기 때문에 관련 보안 문제는 뷰에 주어진 모델 (이 이유로 ViewModel을 사용하려는 조합 수에 따라 다름)과 공유해야한다고 말하고 싶습니다.
이를 통해 두 가지 계층의 보안 유효성 검사가 가능합니다. UI 계층에서는 정상적인 경우에 대한 포스트 백이, 모델이 자체적으로 보안 지식을 유지하고 컨트롤러가 정보를 전달하는 나쁜 행위자에 대한 서버 계층에서 우회됩니다. 즉시 던져 버리는 모델.
이와 같은 2 계층 보안은 업계 표준이며,이 방법으로 보안 로직이 두 곳에만 존재할 수 있으므로 보안 로직을 컨트롤러에 넣고 즉시 거기에 배치하면 보너스가됩니다. UI 및 모델 (모델은 마지막 방어선이므로 모델이 필요하며 데스크탑 클라이언트 또는 서버 관리 도구와 같이 해당 MVC 웹 앱 외부에서 사용하는 경우 특히 중요합니다)
나는 아니오 라고 말할 것이다 .
일반적으로 이러한 종류의 보안 검사는 컨트롤러에 의해 수행됩니다.
Wikipedia 에서와 같이 :
컨트롤러는 뷰의 모델 표현을 변경하기 위해 명령을 관련 뷰로 보낼 수 있습니다
그리고 나는 그것이 직접 관점에서 이루어져야한다고 생각하지 않습니다. 예를 들어 자바 스크립트를 통해 수행되는 경우 보안 문제 일 수 있습니다 (자바 스크립트를 사용 중지하고 권한있는 데이터에 액세스 할 수 있음).
다시, Wikipedia에서 :
뷰는 모델에서 출력 표현 을 생성하는 데 필요한 정보를 요청합니다 .
이 질문에는 몇 가지 문제가 있습니다.
if model.userCanEdit() ... endif
.