• 【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

  • 相关阅读:
    memcached与redis 对比
    Java中的成员初始化顺序和内存分配过程
    mysql inner join,full outer join,left join,right jion
    事务 相关概念理解
    最简单的重试机制
    垃圾脚本黑我linux服务器
    趣解curl
    面试题
    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
    PermGen space
  • 原文地址:https://www.cnblogs.com/jhli/p/9808835.html
Copyright © 2020-2023  润新知