前言:为了保证安全性,在某些重要的接口处我们需要进行一些权限控制,毕竟在现在前后端分离的大背景下,怎么能够安心把重要的数据操作的权限交给前端呢,就更别提其他一些抗风险性了(抓包等)。
我在这里实现的其实不是太细致,主要还是用来提供一种思路吧。校验的方式是通过使用特性,所需要的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";
}
-