效果:
通過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
原文地址:https://www.cnblogs.com/jhli/p/9808835.html