【netcore基礎】MVC API接口權限控制Attribute


效果:

通過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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM