2010-06-05 5 views
0

저는 좋은 개발자가 되려고 노력하고 있습니다. 모든 웹 코드와 함께 ASP.NET MVC 프로젝트가 있고 모든 모델 코드가있는 DAL 프로젝트가 있습니다.우려와 인증의 분리

때때로 DAL의 코드는 현재 사용자가 CurrentUser.IsAdmin과 같은 내용을 확인하여 일부 작업을 수행 할 권한이 있는지 확인해야합니다.

웹 사이트의 경우 현재는 Windows 사용자 이름 (HttpContext.Current.User.Identity)에서 파생되었지만 이는 분명 웹 관련 문제이므로 DAL에 연결해서는 안됩니다.

인증을 느슨하게 결합하는 가장 좋은 패턴은 무엇입니까? DAL이 MVC 코드에 사용자 이름을 요청해야합니까? 아니면 MVC가 DAL에게 말하고 있습니까? 하나 또는 다른 것에 장단점이 있습니까?

감사합니다.

답변

1

일반적으로 데이터 수준이 아닌 컨트롤러 수준에서 보안을 처리합니다. 데이터 레벨에서 처리하고 싶다면 DAL에 현재 사용자 나 현재 사용자의 액세스 수단을 제공하기 위해 주입을 사용합니다. 이 경우 DAL 인스턴스를 만들 때 컨트롤러에서 User 개체를 주입하는 것을 의미합니다. 때로는 감사를 위해이 작업을 수행합니다. 즉, 현재 사용자는 사용자 데이터를 수정할 수있는 액세스 권한을 부여하는 역할의 멤버 일 수 있습니다. 이 경우 변경하려는 실제 사용자를 감사 테이블에 삽입하려고합니다. 나는 HttpContext.Current를 사용하는 것을 피할 것입니다. 컨트롤러의 프로퍼티를 대신 사용하여 DAL이 정적 객체로부터 얻는 것보다 주입해야합니다. 그러면 DAL을 테스트하기가 훨씬 쉬워집니다.

컨트롤러에서 보안을 처리 할 때 AuthorizeAttribute 또는이 컨트롤러에서 파생 된 사용자 지정 특성을 사용하여 교차 보안 문제를 구현할 수 있습니다.