From f63d8ead25bdb3c32dacca817a059bd30390e9bc Mon Sep 17 00:00:00 2001 From: yzh <snbbt@21cn.com> Date: 星期三, 15 六月 2022 22:20:07 +0800 Subject: [PATCH] 1.系统账户数据库优化: 修改“账户类型”的数据类型为VARCHAR2(1024),多个角色时以半角“,”分隔。 加密盐。 密码加密优化;账户登录优化;角色权限管理(作废用户权限); 2.字典类型管理(定义:用户角色) 3.字典数据管理(初始化用户角色数据) 3.角色权限管理 4.系统账户管理,账户类型对应用户角色(可多选)。 --- web/web/SysUser.ashx | 384 ++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 257 insertions(+), 127 deletions(-) diff --git a/web/web/SysUser.ashx b/web/web/SysUser.ashx index ffb5d7b..190dddf 100644 --- a/web/web/SysUser.ashx +++ b/web/web/SysUser.ashx @@ -1,5 +1,5 @@ 锘�<%@ WebHandler Language="C#" Class="SysUserHandler" %> - + using Common; using Dao; using Model; @@ -10,146 +10,276 @@ public class SysUserHandler : PageHandler<SysUser> { - private UserDao _Dao = new UserDao(); + private UserDao _Dao = new UserDao(); - public override JsonPageResult ProcessRequestInternal(PageContext<SysUser> context) - { - string @string = context.GetString("action"); - switch (@string) + public override JsonPageResult ProcessRequestInternal(PageContext<SysUser> context) { - case "saveUser": - return this.SaveUser(context); - case "loadUserList": - return this.LoadUserList(context); - case "deleteUser": - return this.DeleteUser(context); - case "loadUserInfo": - return this.LoadUserInfo(context); - case "loadUserMenuList": - return this.LoadUserMenuList(context); - case "updatePermission": - return this.UpdatePermission(context); - default: - throw new Exception("Invalid Action=" + @string); + string @string = context.GetString("action"); + switch (@string) + { + case "saveUser": + return this.SaveUser(context); + case "loadUserList": + return this.LoadUserList(context); + case "deleteUser": + return this.DeleteUser(context); + case "loadUserInfo": + return this.LoadUserInfo(context); + case "loadUserMenuList": + return this.LoadUserMenuList(context); + case "updatePermission": + return this.UpdatePermission(context); + case "updateStatus": + return this.UpdateStatus(context); + //淇敼瀵嗙爜 + case "updatePwd": + return UpdatePwd(context); + //鏍规嵁鏁扮粍瀛楃涓茶浆鎹㈠瓧鍏� + case "arrayStrToDict": + return ArrayStrToDict(context); + + default: + throw new Exception("Invalid Action=" + @string); + } } - } - private JsonPageResult UpdatePermission(PageContext<SysUser> context) - { - context.CheckRight("1042", FailedOperation.PromptOnly); - string @string = context.GetString("menuIDArray"); - int @int = context.GetInt("userid"); - string[] menuIDArray = JsonConvert.DeserializeObject<string[]>(@string); - if (menuIDArray == null) - throw new ArgumentException("鑿滃崟鏁版嵁寮傚父锛�"); - if (@int == 0) - throw new ArgumentException("USERID鍙傛暟寮傚父锛�"); - this._Dao.UpdatePermission(@int, menuIDArray); - return new JsonPageResult(true, (object) "淇濆瓨鏉冮檺鎴愬姛锛�"); - } - - private JsonPageResult LoadUserList(PageContext<SysUser> context) - { - context.CheckRight("104", FailedOperation.PromptOnly); - int recordCount = 0; - int int1 = context.GetInt("pageSize", 20); - int int2 = context.GetInt("pageIndex", 1); - List<SysUser> list = this._Dao.LoadInfoList(out recordCount, int1, int2); - list.ForEach((Action<SysUser>) (u => u.Password = "")); - return new JsonPageResult(true, (object) new + private JsonPageResult UpdatePermission(PageContext<SysUser> context) { - Table = list, - TotalCount = recordCount - }); - } - - private JsonPageResult DeleteUser(PageContext<SysUser> context) - { - context.CheckRight("1044", FailedOperation.PromptOnly); - int @int = context.GetInt("userid"); - if (@int == 1) - throw new ArgumentException("绯荤粺榛樿璐︽埛涓嶈兘鍒犻櫎锛�"); - this._Dao.Delete(@int); - return new JsonPageResult(true, (object) "鍒犻櫎鐢ㄦ埛鎴愬姛锛�"); - } - - private JsonPageResult LoadUserInfo(PageContext<SysUser> context) - { - context.CheckRight("104", FailedOperation.PromptOnly); - return new JsonPageResult(true, (object) this._Dao.GetUserInfo(context.GetInt("userid"))); - } - - private JsonPageResult LoadUserMenuList(PageContext<SysUser> context) - { - context.CheckRight("104", FailedOperation.PromptOnly); - return new JsonPageResult(true, (object) this._Dao.LoadUserMenuList(context.GetInt("userid")).Keys); - } - - private JsonPageResult SaveUser(PageContext<SysUser> context) - { - int int1 = context.GetInt("userid"); - string string1 = context.GetString("account"); - string string2 = context.GetString("password"); - string string3 = context.GetString("email"); - string string4 = context.GetString("mobile"); - int int2 = context.GetInt("emailFlag"); - int int3 = context.GetInt("mobileFlag"); - int num = 0; - if (string.IsNullOrEmpty(string1) || !Regex.IsMatch(string1, "\\w{3,}")) - throw new ArgumentException("璐︽埛鑷冲皯3浣嶅彲瑙佸瓧绗︼紝璇烽噸鏂拌緭鍏ワ紒"); - if (string.IsNullOrEmpty(string2) || string2.Length < 6) - throw new ArgumentException("璐︽埛瀵嗙爜鑷冲皯6浣嶏紝璇烽噸鏂拌緭鍏ワ紒"); - if (context.GetBoolean("isVerification")) - num = 1; - string string5 = context.GetString("clientIp"); - if (num == 1) - { - if (string.IsNullOrEmpty(string5)) - throw new ArgumentException("IP鍦板潃涓嶈兘涓虹┖锛岃杈撳叆锛�"); - if (string.IsNullOrEmpty(string4.ToString()) || !Regex.IsMatch(string4, "1\\d{10}")) - throw new ArgumentException("鎵嬫満鍙风爜鏃犳晥锛岃閲嶆柊杈撳叆锛�"); + context.CheckRight("1042", FailedOperation.PromptOnly); + string @string = context.GetString("menuIDArray"); + int @int = context.GetInt("userid"); + string[] menuIDArray = JsonConvert.DeserializeObject<string[]>(@string); + if (menuIDArray == null) + throw new ArgumentException("鑿滃崟鏁版嵁寮傚父锛�"); + if (@int == 0) + throw new ArgumentException("USERID鍙傛暟寮傚父锛�"); + this._Dao.UpdatePermission(@int, menuIDArray); + return new JsonPageResult(true, (object) "淇濆瓨鏉冮檺鎴愬姛锛�"); } - if (!string.IsNullOrEmpty(string4.ToString()) && !Regex.IsMatch(string4, "1\\d{10}")) - throw new ArgumentException("鎵嬫満鍙风爜鏃犳晥锛岃閲嶆柊杈撳叆锛�"); - if (!string.IsNullOrEmpty(string3) && !Regex.IsMatch(string3, "^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+")) - throw new ArgumentException("閭鍦板潃鏃犳晥,璇烽噸鏂拌緭鍏ワ紒"); - if ((int3 == 1 || int3 == 2 || (int3 == 3 || int3 == 4) || int3 == 5) && !Regex.IsMatch(string4, "1\\d{10}")) - throw new ArgumentException("鎵嬫満鍙风爜鏃犳晥锛岃閲嶆柊杈撳叆锛�"); - if ((int2 == 1 || int2 == 2 || (int2 == 3 || int2 == 4) || int2 == 5) && !Regex.IsMatch(string3, "^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+")) - throw new ArgumentException("閭鍦板潃鏃犳晥锛岃閲嶆柊杈撳叆锛�"); - SysUser sysUser = new SysUser(); - sysUser.UserID = int1; - sysUser.Account = string1; - sysUser.CreateTime = DateTime.Now; + + private JsonPageResult LoadUserList(PageContext<SysUser> context) + { + context.CheckRight("104", FailedOperation.PromptOnly); + int recordCount = 0; + int int1 = context.GetInt("pageSize", 20); + int int2 = context.GetInt("pageIndex", 1); + List<SysUser> list = this._Dao.LoadInfoList(out recordCount, int1, int2); + list.ForEach((Action<SysUser>) (u => u.Password = "")); + return new JsonPageResult(true, (object) new + { + Table = list, + TotalCount = recordCount + }); + } + + private JsonPageResult DeleteUser(PageContext<SysUser> context) + { + context.CheckRight("1044", FailedOperation.PromptOnly); + int @int = context.GetInt("userid"); + if (@int == 1) + throw new ArgumentException("绯荤粺榛樿璐︽埛涓嶈兘鍒犻櫎锛�"); + this._Dao.Delete(@int); + return new JsonPageResult(true, (object) "鍒犻櫎鐢ㄦ埛鎴愬姛锛�"); + } + + private JsonPageResult LoadUserInfo(PageContext<SysUser> context) + { + context.CheckRight("104", FailedOperation.PromptOnly); + return new JsonPageResult(true, (object) this._Dao.GetUserInfo(context.GetInt("userid"))); + } + + private JsonPageResult LoadUserMenuList(PageContext<SysUser> context) + { + context.CheckRight("104", FailedOperation.PromptOnly); + //return new JsonPageResult(true, (object) this._Dao.LoadUserMenuList(context.GetInt("userid")).Keys); + return new JsonPageResult(true, (object) this._Dao.LoadUserRoleMenuList(context.GetInt("userid")).Keys); + } + + private JsonPageResult SaveUser(PageContext<SysUser> context) + { + int int1 = context.GetInt("userid"); + string string1 = context.GetString("account"); + string string2 = context.GetString("password"); + string userName = context.GetString("userName"); + string userType = context.GetString("userType"); + + List<string> tmpList = new List<string>(); + //鏁扮粍鍚堝苟 + tmpList.AddRange( JsonConvert.DeserializeObject<string[]>(context.GetString("userType")) ); + + //鏁扮粍鍘婚噸 + string[] tmpArray = DataConverter.DelRepeatData(tmpList.ToArray() ); + userType = string.Join(",", tmpArray) ; + + string string3 = context.GetString("email"); + string string4 = context.GetString("mobile"); + int int2 = context.GetInt("emailFlag"); + int int3 = context.GetInt("mobileFlag"); + int num = 0; + if (string.IsNullOrEmpty(string1) || !Regex.IsMatch(string1, "\\w{3,}")) + throw new ArgumentException("璐︽埛鑷冲皯3浣嶅彲瑙佸瓧绗︼紝璇烽噸鏂拌緭鍏ワ紒"); + if(int1<= 0 ) + { + if (string.IsNullOrEmpty(string2) || string2.Length < 6) + throw new ArgumentException("璐︽埛瀵嗙爜鑷冲皯6浣嶏紝璇烽噸鏂拌緭鍏ワ紒"); + } + if (string.IsNullOrEmpty(userName)) + throw new ArgumentException("璐︽埛鍚嶇О涓嶈兘涓虹┖锛岃杈撳叆锛�"); + if (string.IsNullOrEmpty(userType)) + throw new ArgumentException("璐︽埛绫诲瀷涓嶈兘涓虹┖锛岃閫夋嫨锛�"); + if (context.GetBoolean("isVerification")) + num = 1; + string string5 = context.GetString("clientIp"); + if (num == 1) + { + if (string.IsNullOrEmpty(string5)) + throw new ArgumentException("IP鍦板潃涓嶈兘涓虹┖锛岃杈撳叆锛�"); + if (string.IsNullOrEmpty(string4.ToString()) || !Regex.IsMatch(string4, "1\\d{10}")) + throw new ArgumentException("鎵嬫満鍙风爜鏃犳晥锛岃閲嶆柊杈撳叆锛�"); + } + if (!string.IsNullOrEmpty(string4.ToString()) && !Regex.IsMatch(string4, "1\\d{10}")) + throw new ArgumentException("鎵嬫満鍙风爜鏃犳晥锛岃閲嶆柊杈撳叆锛�"); + if (!string.IsNullOrEmpty(string3) && !Regex.IsMatch(string3, "^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+")) + throw new ArgumentException("閭鍦板潃鏃犳晥,璇烽噸鏂拌緭鍏ワ紒"); + if ((int3 == 1 || int3 == 2 || (int3 == 3 || int3 == 4) || int3 == 5) && !Regex.IsMatch(string4, "1\\d{10}")) + throw new ArgumentException("鎵嬫満鍙风爜鏃犳晥锛岃閲嶆柊杈撳叆锛�"); + if ((int2 == 1 || int2 == 2 || (int2 == 3 || int2 == 4) || int2 == 5) && !Regex.IsMatch(string3, "^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+")) + throw new ArgumentException("閭鍦板潃鏃犳晥锛岃閲嶆柊杈撳叆锛�"); + SysUser sysUser = new SysUser(); + sysUser.UserID = int1; + sysUser.Account = string1; + + if (this._Dao.UserNameExists(userName, int1)) + throw new ArgumentException("璐︽埛鍚嶇О宸茬粡瀛樺湪锛岃閲嶆柊杈撳叆锛�"); + + sysUser.UserName = userName; + sysUser.UserType = userType; + sysUser.CreateTime = DateTime.Now; + + /** + //鑾峰彇鍞竴鏍囪瘑绗� + string salt = DataConverter.getRandom(6); if (int1 > 0) { - SysUser userInfo = this._Dao.GetUserInfo(int1); - sysUser.Password = userInfo.Password == string2 ? userInfo.Password : DataHelper.MD5Hex(string2); - sysUser.IsEncryption = userInfo.Password == string2 ? userInfo.IsEncryption : 1; + SysUser userInfo = this._Dao.GetUserInfo(int1); + sysUser.Password = userInfo.Password == string2 ? userInfo.Password : DataHelper.MD5Hex(string2); + sysUser.IsEncryption = userInfo.Password == string2 ? userInfo.IsEncryption : 1; } else { - sysUser.Password = DataHelper.MD5Hex(string2); - sysUser.IsEncryption = 1; + string2 += salt; + sysUser.Password = DataHelper.MD5Hex(string2); + sysUser.IsEncryption = 1; + sysUser.Salt = salt; + }**/ + + sysUser.Email = string3; + sysUser.Mobile = string4; + sysUser.MobileFlag = int3; + sysUser.EmailFlag = int2; + sysUser.IsVerification = num; + sysUser.ClientIp = string5; + if (int1 > 0) + { + context.CheckRight("1042", FailedOperation.PromptOnly); + if (int1 > 0) + { + SysUser userInfo = this._Dao.GetUserInfo(int1); + sysUser.IsEncryption = userInfo.Password == string2 ? userInfo.IsEncryption : 1; + } + //edit:yangzh by 20220612 淇敼鏃朵笉鏇存柊瀵嗙爜 + this._Dao.Update(sysUser); + } + else + { + context.CheckRight("1041", FailedOperation.PromptOnly); + if (this._Dao.Exists(string1)) + throw new ArgumentException("璐︽埛宸茬粡瀛樺湪锛岃閲嶆柊杈撳叆锛�"); + + + string password = ""; + if(int1> 0 ) + { + throw new ArgumentException("瀵嗙爜涓嶈兘涓虹┖锛岃閲嶆柊杈撳叆锛�"); + } + + //鑾峰彇鍞竴鏍囪瘑绗� + string salt = DataConverter.getRandom(6); + + string2 += salt; + password = DataHelper.MD5Hex(string2); + + sysUser.IsEncryption = 1; + sysUser.Salt = salt; + sysUser.Password = password; + + this._Dao.Add(sysUser); + + } + return new JsonPageResult(true, (object) "璐︽埛淇濆瓨鎴愬姛锛�"); } - sysUser.Email = string3; - sysUser.Mobile = string4; - sysUser.MobileFlag = int3; - sysUser.EmailFlag = int2; - sysUser.IsVerification = num; - sysUser.ClientIp = string5; - if (int1 > 0) + + + //鏇存柊淇℃伅鍚敤鎴栧仠鐢� + private JsonPageResult UpdateStatus(PageContext<SysUser> context) { - context.CheckRight("1042", FailedOperation.PromptOnly); - this._Dao.Update(sysUser); + int userId = context.GetInt("userId"); + int status = context.GetInt("status"); + + SysUser sysUser = new SysUser(); + sysUser.UserID = userId; + sysUser.Status = status; + this._Dao.UpdateStatus(sysUser); + return new JsonPageResult(true, "鏇存柊淇℃伅鐘舵�佹垚鍔燂紒"); + } - else + + //淇敼瀵嗙爜 + private JsonPageResult UpdatePwd(PageContext<Model.SysUser> context) { - context.CheckRight("1041", FailedOperation.PromptOnly); - if (this._Dao.Exists(string1)) - throw new ArgumentException("璐︽埛宸茬粡瀛樺湪锛岃閲嶆柊杈撳叆锛�"); - this._Dao.Add(sysUser); + string account = context.GetString("account"); + string newPwd = context.GetString("newPwd"); + int userID = 0; + + if (string.IsNullOrEmpty(account)) + { + throw new ArgumentException("绯荤粺璐﹀彿鍙傛暟寮傚父锛�"); + } + + if (string.IsNullOrEmpty(newPwd) || !System.Text.RegularExpressions.Regex.IsMatch(newPwd, @"[a-zA-Z0-9]{4,10}")) + { + throw new ArgumentException("鐧诲綍瀵嗙爜涓嶈兘涓虹┖锛屼笖蹇呴』涓�4-10浣嶈嫳鏂囨垨鏁板瓧瀛楃缁勫悎锛�"); + } + string salt = ""; + SysUser sysUser = _Dao.GetUser(account); + + salt = sysUser.Salt==null? "": sysUser.Salt.ToString(); + newPwd += salt; + + //瀵嗙爜MD5鍔犲瘑锛� + newPwd = DataHelper.MD5Hex(newPwd); + + _Dao.UpdatePwd(account, newPwd ); + + return new JsonPageResult(true, (object)"淇敼瀵嗙爜鎴愬姛锛�"); + } + + //鏍规嵁鏁扮粍瀛楃涓茶浆鎹㈠瓧鍏� + private JsonPageResult ArrayStrToDict(PageContext<Model.SysUser> context) + { + string userId = context.GetString("userId"); + string userType = context.GetString("userType"); + + Dictionary<string, object> dictionary = new Dictionary<string, object>(); + + List<object> list = DataConverter.stringToList(userType); + for (int i = 0; i < list.Count; i++) + { + //dictionary[userId.ToString()] = list[i]; + dictionary[list[i].ToString()] = list[i]; + } + + return new JsonPageResult(true, dictionary.Keys); } - return new JsonPageResult(true, (object) "璐︽埛淇濆瓨鎴愬姛锛�"); - } + } -- Gitblit v1.9.1