My ASP .Net Core 3.1 MVCアプリで、エンドポイントルーティングを使用する
_ app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "access",
pattern: "access/",
defaults: new { controller = "Home", action = "Access" });
});
_
そのため、/アクセスへの参照、アクセスアクションを起動します。ここで、アプリはユーザーがいくつかのアクセス要件に準拠しているかどうかを確認します。
_if (access checks...)
{
return View();
}
_
これで、このチェックをコントローラに使用するのではなく、カスタムミドルウェア(またはおそらくカスタム承認属性)でチェックすることをお勧めします。だからあなたへの私の質問は、/アクセス領域のカスタムミドルウェアを含めるために、UseEndpoints呼び出しをどのように書き換えるべきですか?
ASP.NET COREのAuthorizeAttribute
と一緒にIAuthorizationFilter
を拡張することができます
1. AuthorizeAttribute
を拡張するクラスを作成します。これは、ASP.NETコアの内蔵_[Authorize]
_属性などのコントローラの上部またはアクションで使用されます。
2.プリフェートOnAuthorization(AuthorizationFilterContext context)
IAuthorizationFilter
インタフェースの一部です。
3.許可ユーザーに対して追加の操作なしのキーワードreturn
キーワード。
4. AuthorizationFilterContext
context.Result = new UnauthorizedResult()
として許可されていないユーザーの許可されていない場合
_ public class SampleAuthorizePermission : AuthorizeAttribute, IAuthorizationFilter
{
public string Permissions { get; set; }
public void OnAuthorization(AuthorizationFilterContext context)
{
if (string.IsNullOrEmpty(Permissions))
{
context.Result = new UnauthorizedResult();
return;
}
var userName = context.HttpContext.User.Identity.Name;
var assignedPermissionsForUser =
MockData.UserPermissions
.Where(x => x.Key == userName)
.Select(x => x.Value).ToList();
var requiredPermissions = Permissions.Split(",");
foreach (var x in requiredPermissions)
{
if (assignedPermissionsForUser.Contains(x))
return;
}
context.Result = new UnauthorizedResult();
return;
}
}
_
そしてあなたのコントローラに
_[SampleAuthorizePermission(Permissions = "CanRead")]
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "value";
}
_