2017-07-27 13 views
2

aspnetcore 1.1でクレームベースの認証と承認を使用しています。aspnetcore IDで許可されていないメッセージを表示する方法

ユーザーがログインしていない場合、ユーザーはログインページに期待どおりに行きます。

ただし、ユーザーがログインしているが正しいクレームがない場合、ユーザーは再びログインページに戻ります。

どのように変更すると、ユーザーは「あなたは承認されていません...」という別のビューにルーティングされますか?


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

関連する問題