2009-09-21 4 views
0

내 asp.net mvc 프로젝트에서 나는 사용자가 로그인 할 때 두 개의 객체를 세션에 저장합니다. 하나는 로그인 한 사용자를 나타내는 User 객체이고 다른 하나는 사용자 조직을 나타내는 Organization 객체입니다., 세션에 저장된 객체에 액세스하는 가장 우아한 방법은 무엇입니까?

모든 동작 방법에서 이러한 개체 중 하나 또는 모두를 사용할 수 있어야합니다. 이것을 다루는 가장 우아한 방법은 무엇입니까? 현재 각 액션에는 이러한 객체 각각에 대한 매개 변수가 있으며 세션에서 객체를 가져 오는 사용자 정의 모델 바인더가 있습니다. 이것은 최소한 세션 액세스를 캡슐화하지만 모든 메소드 서명에서 params를 갖는 것은 성가신 일입니다. 더 좋은 방법이 있습니까?

다음은 대부분의 조치 방법입니다.

public ActionResult Pending(IUser CurrentUser) 
    { 
     var users = CurrentUser.GetMyOrgPendingUsers(); 
     return View(users); 
    } 

답변

0

Controller 클래스에는 User 속성이 있습니다. 현재 사용자를 추적하기 위해 자신 만의 방식을 설계하는 대신이 방법을 사용해볼 생각이 있습니까?

+0

나는 그것을 살펴 봤지만 IPrincipal을 구현할 필요가있는 것 같았고, 기존 클래스 라이브러리 위에 구축하고있다. –

0

여기 IPrincipal을 사용하여 다시 생각해 볼 수 있습니다. 매우 편리하며 .NET 인증 비트의 나머지 부분을 매우 원활하게 처리 할 수 ​​있습니다.

손쉬운 문제는 가장 쉬운 방법은 보호 된 속성으로 기본 컨트롤러 클래스에 연결하는 것입니다. 세션에 대한 참조 (또는 세션에서 사용하는 기본 인터페이스와 관계없이)를 참조하고 해당 클래스를 컨트롤러에서 노출하는 사용자 컨텍스트 클래스를 만드는 것이 조금 더 우아 할 것입니다. 주된 장점은 필요하다면 지원 저장소를 변경하는 것이 더 쉬워지며 일반적으로 더 많은 동작을 캡슐화 할 수 있습니다.

1

거의 모든 작업에서 IUser에 액세스해야하므로 다른 모든 컨트롤러가 파생 된 곳의 기본 컨트롤러를 사용할 수 있습니다. 기본 컨트롤러에서 IUser를 멤버 변수로두고 기본 컨트롤러에서 OnActionExecuting() 메서드를 재정 의하여 세션 컨트롤에 액세스 할 수있는 코드를 넣습니다.

OnActionExecuting()은 작업이 호출 될 때마다 호출됩니다.

관련 문제