2017-07-27 28 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

相關問題