前言:为了保证安全性,在某些重要的接口处我们需要进行一些权限控制,毕竟在现在前后端分离的大背景下,怎么能够安心把重要的数据操作的权限交给前端呢,就更别提其他一些抗风险性了(抓包等)。
我在这里实现的其实不是太细致,主要还是用来提供一种思路吧。校验的方式是通过使用特性,所需要的Action或者Controller上面添加即可,在这方面个人比较喜欢这种方式;然后就是根据登录用户的角色来进行限制。
首先创建一个特性类并继承自
ActionFilterAttribute
,然后实现以下代码public class RoleAttribute : ActionFilterAttribute { readonly string[] _role; /// <summary> /// 用户权限校验 /// </summary> /// <param name="role">可以通过的权限</param> public RoleAttribute(params string[] role) { _role = role; }
通过重载
OnActionExecuting
方法对权限进行校验,如果定义并传入了可通过的权限,那么如果不满足就会返回403错误
public override void OnActionExecuting(ActionExecutingContext context)
{
ITokenService tokenService = App.GetService<ITokenService>();
var tokenModel = tokenService.ParseToken(context.HttpContext);
if (!_role.Contains(tokenModel.UserType))
{
context.HttpContext.Response.StatusCode = 403;
context.Result = new ApiJsonResult(ApiResult.Error, "权限不足!")
{
StatusCode=403
};
}
base.OnActionExecuting(context);
}
调用,这里假设管理员的权限代码是10,那么就只有登录用户的权限是10才可以访问这个方法,如果是加到控制器上面的话就是对整个控制器进行限制。
[Role("10")] [HttpPost] public string Get() { return "Success"; }
结束
-
技术群:添加小编微信并备注进群
小编微信:mm1552923
公众号:dotNet编程大全