하나의 작업에 대한 컨트롤러 AuthorizeAttribute 재정의
AuthorizeAttribute로 장식 된 컨트롤러가 있습니다. 컨트롤러에는 CustomAuthorizeAttribute에서 제공하는 일부 사용자 지정 인증이 필요한 하나의 작업을 제외하고 모두 인증이 필요한 여러 작업이 포함되어 있습니다.
내 질문은 컨트롤러 수준에서 [Authorize]를 추가하면 한 번의 작업에서만 [CustomAuthorize]로 재정의 (또는 제거) 할 수 있습니까? 아니면 컨트롤러 수준에서 [Authorize]를 제거하고 다른 모든 작업에 개별적으로 추가해야합니까?
나는 게으르고 AuthorizeAttribute로 모든 작업을 장식하고 싶지 않기 때문에 순전히 편의를 요구하고 있습니다.
[Authorize]
public class MyController : Controller {
//requires authentication
public ViewResult Admin() {
return View();
}
//... a lot more actions requiring authentication
//requires custom authentication
[CustomAuthorize] //never invoked as already failed at controller level
public ViewResult Home() {
return View();
}
}
Order 속성을 사용하여 속성이 실행되는 순서를 변경할 수 있지만이 경우 즉각적인 결과를 생성하지 않는 한 둘 다 실행될 것이라고 생각합니다. 핵심은 가장 제한적인 속성을 가장 높은 수준 (클래스)에 적용하고 메서드에 대해 더 제한적인 속성을 얻는 것입니다. 당신이 원하는 경우 Home
작업이 공개적으로 사용할 수, 예를 들어, 당신은 클래스에서 권한 부여 특성을 제거하고, 다른 방법의 각각에 적용해야합니다.
작업의 허용 수준은 같지만 결과가 다른 경우 순서를 변경하는 것으로 충분할 수 있습니다. 예를 들어, 일반적으로 리디렉션 할 Logon
행동하지만 대한 Home
당신은 리디렉션 할 About
작업입니다. 이 경우에는 class 속성 Order=2
과 Home
action 속성을 제공하십시오 Order=1
.
MVC 5에서는 새 속성 인 OverrideAuthorization을 사용하여 모든 작업에 대한 권한을 재정의 할 수 있습니다. 기본적으로 컨트롤러에 정의 된 것과 다른 인증 구성이있는 작업에 추가합니다.
다음과 같이합니다.
[OverrideAuthorization]
[Authorize(Roles = "Employee")]
public ActionResult List() { ... }
http://www.c-sharpcorner.com/UploadFile/ff2f08/filter-overrides-in-Asp-Net-mvc-5/ 에서 자세한 정보
ASP.NET Core 2.1 에는 OverrideAuthorization 특성이 없으며 컨트롤러가 아닌 경우에도 익명으로 작업을 수행 할 수 있습니다. https://docs.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-2.1 에서 자세한 정보
한 가지 옵션은 다음과 같이하는 것입니다.
[Authorize(Roles = "Admin,Employee")] // admin or employee
public class XController : Controller
{
[Authorize(Roles = "Admin")] // only admin
public ActionResult ActionX() { ... }
[AllowAnonymous] // anyone
public ActionResult ActionX() { ... }
}
너무 많은 시간을 보낸 후 해결책을 찾았습니다. 사용자 지정 AuthorizeAttribute로 컨트롤러를 장식해야합니다.
public class OverridableAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var action = filterContext.ActionDescriptor;
if(action.IsDefined(typeof(IgnoreAuthorization), true)) return;
var controller = action.ControllerDescriptor;
if(controller.IsDefined(typeof(IgnoreAuthorization), true)) return;
base.OnAuthorization(filterContext);
}
}
AllowAnonymous
액션 과 짝을 이룰 수있는
[AllowAnonymous]
컨트롤러에서 [Authorize] 를 재정의 하는 데 필요한 모든 작업 은 다음을 추가하는 것입니다.
[AllowAnonymous]
권한을 부여하지 않으려는 작업에 추가합니다 (그런 다음 필요에 따라 사용자 지정 속성을 추가합니다).
의견 / intellisense 참조 :
Represents an attribute that marks controllers and actions to skip the System.Web.Mvc.AuthorizeAttribute during authorization.
'developer tip' 카테고리의 다른 글
실행중인 스크립트의 소스 경로를 어떻게 찾을 수 있습니까? (0) | 2020.11.30 |
---|---|
시간 부분을 무시하고 T-SQL에서 날짜 비교 (0) | 2020.11.30 |
Android : 공백이있는 URL 문자열을 URI 객체로 구문 분석하는 방법은 무엇입니까? (0) | 2020.11.30 |
R의 모형 행렬에있는 요인의 모든 수준 (0) | 2020.11.30 |
node.js에서 마지막으로 수정 된 파일 날짜 (0) | 2020.11.30 |