1
wtt
2026-04-10 fae58e2951ccf415ad8e8098ca49f5611e410dd3
WebAPI/Service/JwtAuthorizeAttribute.cs
@@ -33,7 +33,7 @@
    {
        try
        {
            // 检查匿名访问
            // 检查匿名访问(认证)
            if (IsAnonymousAllowed(actionContext)) return;
            // 获取Token
@@ -58,25 +58,20 @@
            // 验证是否拥有访问模块的权限
            // 有两种判断方式 一种是通过角色去判断,一种是通过用户去判断 目前暂时不做区分,后续可增加系统参数来进行区分
            // 获取控制器描述器
            HttpControllerDescriptor controllerDescriptor = actionContext.ControllerContext.ControllerDescriptor;
            // //获取控制器类型
            Type controllerType = controllerDescriptor.ControllerType;
            // // 获取控制器级别标签
            var controllerAttr = controllerType.GetCustomAttribute<PermissionAttribute>();
            //
            var actionAttr = actionContext.ActionDescriptor
            .GetCustomAttributes<PermissionAttribute>()
            .FirstOrDefault();
            // 安全控制器描标签
            var controllerAttr = actionContext.ControllerContext?.ControllerDescriptor?.GetCustomAttributes<PermissionAttribute>().FirstOrDefault();
            // 安全获取Action标签
            var actionAttr = actionContext.ActionDescriptor?.GetCustomAttributes<PermissionAttribute>().FirstOrDefault();
            string PermissionStr = string.Empty;
            // 判断控制器级别上是否启用了鉴权标签
            if(controllerAttr != null && !string.IsNullOrWhiteSpace(controllerAttr.HModName))
            if(controllerAttr != null && !string.IsNullOrWhiteSpace(controllerAttr?.HModName))
            {
                PermissionStr += controllerAttr.HModName;
                // 查看是否需要更细粒度的控制
                if(actionAttr != null && !string.IsNullOrWhiteSpace(actionAttr.Operate))
                if(actionAttr != null && !string.IsNullOrWhiteSpace(actionAttr?.Operate))
                {
                    // 该动作对应的模块名和控制器名是否不一致
                    if (string.IsNullOrWhiteSpace(actionAttr.HModName))
@@ -99,6 +94,19 @@
                    }
                }
                
            }else if (actionAttr != null && !string.IsNullOrWhiteSpace(actionAttr?.HModName) && !string.IsNullOrWhiteSpace(actionAttr?.Operate))
            {
                // 单独在动作上启用鉴权功能
                PermissionStr = actionAttr.HModName + actionAttr.Operate;
                if (!string.IsNullOrWhiteSpace(PermissionStr))
                {
                    if (!DBUtility.ClsPub.Security_Log(PermissionStr, 1, false, JWTHelper.getUserName(token)))
                    {
                        HandleForbidden(actionContext);
                        return;
                    }
                }
            }