2017-07-27 27 views
2

我在aspnetcore 1.1中使用基于声明的身份验证和授权。如何以aspnetcore身份显示未经授权的邮件

如果用户未登录,他会按预期登录到登录页面。

但是,如果用户已登录,但没有正确的声明,则用户会再次转发回登录页面。

我该如何改变它,以便将用户路由到另一个视图,其中显示“您没有被授权......”?


services.AddAuthorization(options=> 
{ 
    options.AddPolicy("IsEDIAdmin", policy => 
     policy.RequireClaim("IsEDIAdmin")); 
}); 

[Authorize(Policy = "IsEDIAdmin")] 
public IActionResult App() 
{ 
     return PartialView(); 
} 

回答

1

我认为这是一个比较复杂一点比它应该是,但你应该能够创建自己的过滤器。例如(未经测试,但编译):

public class ClaimRequirementAttribute : TypeFilterAttribute 
{ 
    public ClaimRequirementAttribute(string claim, string failUrl) : base(typeof(ClaimRequirementFilter)) 
    { 
     Arguments = new object[] { claim, failUrl }; 
    } 
} 

public class ClaimRequirementFilter : IAsyncActionFilter 
{ 
    private readonly string _claim; 
    private readonly string _failUrl; 

    public ClaimRequirementFilter(string claim, string failUrl) 
    { 
     _claim = claim; 
     _failUrl = failUrl; 
    } 

    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) 
    { 
     if (!context.HttpContext.User.Claims.Any(c => c.Value == _claim)) 
     { 
      context.Result = new RedirectResult(_failUrl); 
     } 
     else 
     { 
      await next(); 
     } 
    } 
} 

而且使用这样的:

[ClaimRequirement("IsEDIAdmin", "/some-exciting/url")] 
public IActionResult Index() 
{ 
    //snip 
} 
+0

很不错的!将尝试行走 –

+0

太好了,请让我知道它是怎么回事。 – DavidG

相关问题