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) "账户保存成功!");
  }
}