현재 사용자 역할을 기반으로하는 새로운 ASP MVC 5 응용 프로그램에서 보안을 구현하려고합니다. 목표는 특정 역할 (또는 그 이상)이없는 경우 사용자가 특정 컨트롤러 또는 컨트롤러 방법에 액세스하지 못하게하는 것입니다. 지금까지 질문에 읽은 것을 바탕으로, 나는이 (MyAppRole가 BTW, 열거하다)과 같은 AuthorizeAttribute을 상속 속성 생성 :AuthorizeAttribute에서 상속하는 특성이 작동하지 않습니다.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class AuthorizeRoleOrSuperiorAttribute : AuthorizeAttribute
{
private MyAppRole _authorizedRole;
public AuthorizeRoleOrSuperiorAttribute(MyAppRole authorizedRole)
{ //Breakpoint here
_authorizedRole = authorizedRole;
}
public override void OnAuthorization(HttpActionContext actionContext)
{ //Breakpoint here
base.OnAuthorization(actionContext);
if (!UserInfo.GetUserRoles().Any(r => (int)r >= (int)_authorizedRole))
throw new UnauthorizedAccessException(ErrorsModule.RoleMissing);
}
}
을 그리고 난 방법 및 /에이 방법으로 호출 또는 컨트롤러 :
[AuthorizeRoleOrSuperior(MyAppRole.Admin)]
public class MyController : Controller
{
[AuthorizeRoleOrSuperior(MyAppRole.Admin)]
public ViewResult Index()
{
[...]
}
[...]
}
나는 비록, 생성자와 OnAuthorization 방법하지만, 내가 응용 프로그램을 실행하고 관련 컨트롤러 또는 메서드를 호출 할 때, 나는 그들 중 하나를 명중하지 않으며 조치라고 결코에 브레이크 포인트를 배치 나는 심지어 로그인하지도 않았다.
참고 : AuthorizeAttribute는 사용할 때 제대로 작동합니다.
속성이 액세스 및 필터 액세스를 방해 할 수있는 이유는 무엇입니까?
고마워, 그게 내가 찾고 있던 모든 것이었고 이제 모든 것이 의도 한대로 작동한다. 이제부터는 상속 된 클래스의 네임 스페이스에주의를 기울이는 것을 잊지 않을 것입니다 ... – ZipionLive