문제

나는 최근에 MVC 접근 방식으로 일하기 시작 했으므로 여기에 이것이 당신에게 쉬운 전문가라고 생각합니다.

액세스 제어는 어디에 넣습니까?

  1. 관점에서? 내 템플릿의 스위치와 플래그 외에 논리를 갖고 싶지 않으므로 가장 실행 가능한 옵션처럼 들립니다.
  2. 모델에서? 각 비즈니스 객체는 누가 물어볼 것인지에 따라 자신에 대해 어떤 데이터를 공개 할 것인지 결정해야합니까?
  3. 컨트롤러에서? 그것이 내가 지금 가지고있는 곳이지만 비즈니스 규칙을 일관되게 유지하기가 어렵습니다.

아니면 다른 옵션이 있습니까?

도움이 되었습니까?

해결책

이것은 당신이 사용하는 프레임 워크에 따라 다르며 언어는 당신이 사용할 수있는 많은 도구를 지시합니다.

높은 수준에서 입장 시점에서 액세스 보안을 구성해야합니다. 또한 응용 프로그램의 여러 부분에서 자율적이거나 재사용 될 수있는 모든 수준에서 액세스 보안을 다시 확인해야합니다 (로직 레이어를 사용하는 동료 포털에서 보안을 확인한 사람). 걱정해야 할 또 다른 것은 데이터 보안이며 가능한 한 데이터에 가깝습니다 (위의 #2에 예, 별개라는 것을 이해합니다).

이것은 응용 프로그램 논리와 도메인 로직의 차이와 비슷합니다. 하나의 특정 응용 프로그램 (Windows 서비스와 비교 한 웹 앱 또는 무엇이든)에 특정한 논리가있는 경우 해당 응용 프로그램에서만 해당 논리를 정의해야합니다. 일부 논리가 응용 프로그램 간의 경계를 가로 지르는 경우 (응용 프로그램간에 재사용 할 수 있음) 도메인 로직으로 자격이 있으며 모델에서 정의해야합니다. 응용 프로그램은 도메인 로직을 사용할 수 있지만 소유하지 않아야합니다.

다른 팁

모델 (일명 데이터) 보안의 경우 모델은 액세스를 "제어"하며 컨트롤러는 액세스를 "용이하게"할 것입니다. 이는 컨트롤러와 독립적으로 모델을 재사용 할 수 있으며 모델을 사용하는 다른 컨트롤러에 필요한 일반적인 코드 복제를 무효화하지 않으면 최소화합니다.

예를 들어 자동차, 운전자 및 열쇠. (모델, 컨트롤러, API 각각). 매우 작은 인터페이스 (key == API)로 인해 모델은 API (키 FOB) 당 컨트롤러 액세스를 허용하거나 거부합니다. 다양한 유형의 액세스가 허용됩니다 (Valet Key, 소유자 키, 소유자 FOB). Valet 키 인터페이스를 사용하여 컨트롤러는 장갑 구획, 트렁크 및 가스 탱크와 같은 모델의 일부 데이터/기능에 액세스하지 못합니다. 이것은 본질적으로 컨트롤러를 매우 작은 API/명령 표면적으로 식별하고 분류하여 모델에서 구현 한 역할 기반 액세스입니다.

이는 모델의 데이터에 액세스하기 위해 기본 인증 만 있으면 다른 컨트롤러 (다른 드라이버가있는 자동차)가 모델을 사용할 수 있음을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top