Просмотр исходного кода

!660 【轻量级 PR】添加List,IEnumerable ForEach异步扩展
Merge pull request !660 from 适可而止/next

zuohuaijun 3 лет назад
Родитель
Сommit
fc67fae17d

+ 20 - 0
Admin.NET/Admin.NET.Core/Extension/ListExtensions.cs

@@ -0,0 +1,20 @@
+namespace Admin.NET.Core;
+
+public static class ListExtensions
+{
+    public static async Task ForEachAsync<T>(this List<T> list, Func<T, Task> func)
+    {
+        foreach (var value in list)
+        {
+            await func(value);
+        }
+    }
+
+    public static async Task ForEachAsync<T>(this IEnumerable<T> source, Func<T, Task> action)
+    {
+        foreach (var value in source)
+        {
+            await action(value);
+        }
+    }
+}

+ 30 - 0
Admin.NET/Admin.NET.Core/Util/RegularValidate.cs

@@ -0,0 +1,30 @@
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 正则校验
+/// </summary>
+public static class RegularValidate
+{
+    /// <summary>
+    /// 验证密码规则
+    /// </summary>
+    /// <param name="password"></param>
+    /// <returns></returns>
+    public static bool ValidatePassword(string password)
+    {
+        var regex = new Regex(@"
+(?=.*[0-9])                     #必须包含数字
+(?=.*[a-z])                     #必须包含小写
+(?=.*[A-Z])                     #必须包含大写
+(?=([\x21-\x7e]+)[^a-zA-Z0-9])  #必须包含特殊符号
+.{8,30}                         #至少8个字符,最多30个字符
+", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
+
+        //如果要求必须包含小写、大写字母,则上面的(?=.*[a-zA-Z]) 要改为:
+        /*
+         * (?=.*[a-z])
+         * (?=.*[A-Z])
+         */
+        return regex.IsMatch(password);
+    }
+}

+ 10 - 4
Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs

@@ -52,17 +52,23 @@ namespace Admin.NET.Web.Core
         /// <returns></returns>
         private static async Task<bool> CheckAuthorzieAsync(DefaultHttpContext httpContext)
         {
+            // 路由/按钮名称
+            var routeName = httpContext.Request.Path.Value[1..].Replace("/", ":");
+
+            string accountType = App.User.FindFirst(ClaimConst.AccountType)?.Value;
+            string superAdmin = ((int)AccountTypeEnum.SuperAdmin).ToString();
+
+            // 只有超管可以操作数据库
+            if (routeName.Contains("sysDatabase") && accountType != superAdmin) return false;
+            
             // 登录模式判断PC、APP
             if (App.User.FindFirst(ClaimConst.LoginMode)?.Value == ((int)LoginModeEnum.APP).ToString())
                 return true;
 
             // 排除超管
-            if (App.User.FindFirst(ClaimConst.AccountType)?.Value == ((int)AccountTypeEnum.SuperAdmin).ToString())
+            if (accountType == superAdmin)
                 return true;
 
-            // 路由/按钮名称
-            var routeName = httpContext.Request.Path.Value[1..].Replace("/", ":");
-
             // 获取用户拥有按钮权限集合
             var ownBtnPermList = await App.GetService<SysMenuService>().GetOwnBtnPermList();
             // 获取系统所有按钮权限集合