문제

현재 [Authorize (rolize = ".....")를 사용하여 ASP.NET MVC 1 앱에서 컨트롤러 작업을 보호합니다. 이는 제대로 작동합니다. 그러나 특정 검색보기에는 검색 목록에서 선택한 레코드를 기반으로 활성화/비활성화되어야하는 이러한 작업으로 경로를 경로와 사용자 로그인 한 사용자의 보안 개인 버튼이 있어야합니다.

따라서 이러한 버튼의 상태를 결정하기 위해 이러한 대상 컨트롤러/작업을 응용 프로그램 역할과 교차 참조하는 DB 테이블에 액세스하는 클래스가 필요하다고 생각합니다. 이것은 분명히 2 곳에서 개인을 유지해야 할 것이므로 해당 클래스/DB 테이블과 컨트롤러 동작에 있어야합니다 (또한 조치에 대한 액세스를 변경하려면 변경해야합니다. DB 테이블 항목 만 변경하기보다는 코드 및 컴파일).

이상적으로는 [승인] 기능을 확장하여 [승인] 코드의 역할을 지정하는 대신 사용자, 컨트롤러 및 작업을 기반으로 보안 클래스를 쿼리하고 부울 허용 또는 반환합니다. 액세스 거부. 이것에 대한 좋은 기사가 있습니까? 나는 그것이 원하지 않는 일이라고 상상할 수 없지만, 나는 그것을하는 방법에 대해 무엇이든 찾기 위해 고군분투하는 것 같습니다 (월요일 아침 뇌가 될 수 있습니다). 기사를 보고이 코드를 시작했습니다. http://schotime.net/blog/index.php/2009/02/17/Custom-Authorization-with-aspnet-mvc/ , 그리고 그것은 OK에서 시작되는 것처럼 보이지만 HTTPContext에서 호출 컨트롤러와 동작 값을 얻는 "올바른"방법을 찾을 수 없습니다. 요청 URL에서 추출하기 위해 약간의 코드를 퍼지 할 수 있지만 그럴 수 있습니다. 나에게 옳지 않은 것처럼 보이고 오히려 제대로 할 것입니다.

건배

MH

도움이 되었습니까?

해결책

나는 이것을 다른 포럼에서 발견했으며 누군가가 유용하다고 생각할 경우 여기에 게시 할 것입니다. MVC 1 또는 2를 사용하는지 여부에 따라이 작업을 수행하는 방법에 유의하십시오.

당신이 만든 클래스는 구현해야합니다

public void OnAuthorization(AuthorizationContext filterContext)

그런 다음 사용할 수 있습니다

string controllerName = filterContext.RouteData.Values["controller"].ToString();

그리고 동일하게 "컨트롤러"를 "action"을 대체합니다 (먼저이 값의 널을 확인하십시오). MVC 2에서는 FilterContext.actionDescriptor.AccionName 및 .actionDescriptor.controllerDescriptor.controllerName으로 변경할 수 있으며 NULLS를 확인할 필요가 없습니다.

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