asp.net Core 中AuthorizationHandler 实现自定义授权
2021-02-19 10:21
标签:前言 ret edit serial isnull dcl 技术 框架 protect
ASP.NET Core 中 继承的是AuthorizationHandler ,而ASP.NET Framework 中继承的是AuthorizeAttribute. 它们都是用过重写里面的方法实现过滤请求的。 现在我们实现如何在 ASP.NET Core MVC 实现自定义授权。 关于AuthorizationHandler 详细介绍可以看这里 https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.2#authorization-handlers 比如我们后台有个博客管理功能,那我们可以新建一个Blog的控制器,比如BlogController 里面有添加,删除,编辑等功能,分别是Add,Delete,Edit 代码如下 如果有打印可以起个名字叫 public IActionResult Print() 自定义就是做个控制界面做勾选功能,用户根据自身业务选择。 以此类推,在ASP.NET 框架下默认路由就是Controller和Action,除非你修改默认路由,当然了你修改默认路由你的权限逻辑也得变。 AuthorizationHandler 参数里面有个IAuthorizationRequirement要我们去填充,根据我们自己业务自己选择定义数据。 第一个参数集合 Startup 里面,添加一个授权策略,PermissionRequirement 放进去,然后注入 控制器里面加上标示 List 至此我们实现定义授权判断。实际业务上每个人可以根据自己的情况做处理。 asp.net Core 中AuthorizationHandler 实现自定义授权 标签:前言 ret edit serial isnull dcl 技术 框架 protect 原文地址:https://www.cnblogs.com/lonelyxmas/p/12932416.html前言
如何自定义授权
public class BlogController : Controller
{
public IActionResult Index()
{
return View();
}
///
实现过滤器
public class PermissionRequirement : IAuthorizationRequirement
{
///
public class PermissionItem
{
///
////权限要求参数
var permissionRequirement = new PermissionRequirement(
"/Home/visitDeny",// 拒绝授权的跳转地址
ClaimTypes.Name,//基于用户名的授权
expiration: TimeSpan.FromSeconds(60 * 5)//接口的过期时间
);
#endregion
//【授权】
services.AddAuthorization(options =>
{
options.AddPolicy("Permission", policy => policy.Requirements.Add(permissionRequirement));
});
// 注入权限处理器
services.AddTransient
[Authorize("Permission")]
public class BlogController : Controller
{
}
登录页面授权
[HttpPost]
public async Task
权限判断
public class PermissionHandler : AuthorizationHandler
>(perData);
if (lst.Where(w => w.controllerName == controllerName && w.actionName == actionName).Count() > 0)
{
//如果在配置的权限表里正常走
context.Succeed(requirement);
}
else
{
//不在权限配置表里 做错误提示
//如果是AJAX请求 (包含了VUE等 的ajax)
string requestType = filterContext.HttpContext.Request.Headers["X-Requested-With"];
if (!string.IsNullOrEmpty(requestType) && requestType.Equals("XMLHttpRequest", StringComparison.CurrentCultureIgnoreCase))
{
//ajax 的错误返回
//filterContext.Result = new StatusCodeResult(499); //自定义错误号 ajax请求错误 可以用来错没有权限判断 也可以不写 用默认的
context.Fail();
}
else
{
//普通页面错误提示 就是跳转一个页面
//httpContext.Response.Redirect("/Home/visitDeny");//第一种方式跳转
filterContext.Result = new RedirectToActionResult("visitDeny", "Home", null);//第二种方式跳转
context.Fail();
}
}
}
else
{
context.Fail();
}
}
}
文章标题:asp.net Core 中AuthorizationHandler 实现自定义授权
文章链接:http://soscw.com/essay/57491.html