私はこのようなコントローラーを持っています:
[Authorize(Users="Admin")]
public class MyController : Controller
{
...
[AllowAnonymous]
public AllUsersAction()
{
}
}
私が実際に認証したい場合を除いAllUsersAction
て、管理者だけでなく、すべての認証されたユーザーだけがそれをヒットできるはずです。
何をすべきか?
編集:私はコントローラー全体を承認し、にのみ使用可能である必要があるすべてのアクションに対してより多くの制限を提供できることを知っていますAdmin
。ただし、1つを除くすべてのアクションに属性を設定したいと思います。
質問はもっと言い換えることができます:それが現在可能でない場合、この「ミニマリズム」を可能にする実装はどのように見えるでしょうか?
コントローラのパラメータなしでAuthorize属性を使用します。
[Authorize]
public class MyController : Controller
{
...
public AllUsersAction()
{
}
[Authorize(Users="Admin")]
public ActionResult OnlyForAdmin()
{
}
}
また、制限されたアクションの承認属性の役割/ユーザープロパティを指定します。
残念ながら、コントローラーのAuthorize属性は、アクションにAllowAnonymous属性がある場合にのみ承認をバイパスします。幸い、アクションに独自のAuthorize属性がある場合は、Authorize属性のOnAuthorizationメソッドをオーバーライドして、コントローラーのAuthorize属性での承認チェックをスキップできます。
public class CustomAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if(filterContext.ActionDescriptor.IsDefined(typeof(AuthorizeAttribute), true))
{
//skip authorization check if action has Authorize attribute
return;
}
base.OnAuthorization(filterContext);
}
}
このCustomAuthorizeは、次の例で使用できます。
[CustomAuthorize(Users="Admin")]
public class MyController : Controller
{
...
[Authorize]
public AllUsersAction()
{
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加