效果:
通過Attribute來簡單控制某個方法的訪問權限
例如:
下面api只能角色id是【001,002,999】的登錄用戶才能訪問
/// <summary> /// 管理用戶列表 /// </summary> /// <param name="req">查詢條件</param> /// <param name="token">登錄令牌</param> /// <returns></returns> [HttpGet("userlist")] [CustomAuthorize(Roles = "001,002,999")] public CrmManageUserListResp CrmManageUserList([FromQuery] CrmManageUserListReq req, [FromHeader] [Required] string token) { return _DoInvoke(req, _userService.CrmManageUserList); }
其中的 CustomAuthorizeAttribute 是自定義的控制器過濾類
代碼如下:
using GeduData.Server; using Microsoft.AspNetCore.Mvc.Filters; using System.Threading.Tasks; namespace GeduDistributionApi.Extension { public class CustomAuthorizeAttribute : ActionFilterAttribute { public string Roles { get; set; } public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { Microsoft.AspNetCore.Http.HttpRequest request = context.HttpContext.Request; string token = request.Headers["token"].ToString(); //拿到用戶信息,匹配角色是否可以訪問 string defailtrole = "999"; if (Roles.Contains(defailtrole) == false) { throw new GeduException("暫無訪問權限"); } return base.OnActionExecutionAsync(context, next); } } }
在這里拿到header里的token,獲取當然用戶的登錄信息,角色信息等,進行匹配即可。
如果沒有權限即可結束掉當前請求,並且返回統一的錯誤提示信息。
全局異常捕獲在另一個博文里介紹配置方法
https://www.cnblogs.com/jhli/p/9808827.html