/// <summary> /// 修改用户别名 /// </summary> /// <param name="username">用户名</param> /// <param name="aliasName">用户别名</param> /// <returns></returns> public static string UpdateUserAliasName(string username, string aliasName) { if (ModelConfigHelper.ModelIsViewMode(typeof(Sys_User))) { return("用户管理模块为视图模式不允许更新用户别名!"); } if (string.IsNullOrWhiteSpace(aliasName)) { return("用户别名不能为空!"); } string errMsg = string.Empty; Sys_User user = CommonOperate.GetEntity <Sys_User>(x => x.UserName == username, null, out errMsg); if (user == null) { return("用户信息不存在!"); } if (user.AliasName != aliasName) { user.AliasName = aliasName; Guid rs = CommonOperate.OperateRecord <Sys_User>(user, ModelRecordOperateType.Edit, out errMsg, new List <string>() { "AliasName" }, false); } return(errMsg); }
/// <summary> /// 修改密码 /// </summary> /// <param name="userId">用户Id</param> /// <param name="newPwd">新密码</param> /// <param name="errMsg">错误信息</param> /// <returns></returns> public static bool ModifyPassword(Guid userId, string newPwd, out string errMsg) { errMsg = string.Empty; if (ModelConfigHelper.ModelIsViewMode(typeof(Sys_User))) { errMsg = "用户管理模块为视图模式不允许更新密码!"; return(false); } Sys_User user = CommonOperate.GetEntity <Sys_User>(x => x.Id == userId && !x.IsDeleted && x.IsValid && x.IsActivated, string.Empty, out errMsg); if (user == null) { errMsg = "非法用户!"; return(false); } //获取混淆码 string passwordSalt = SecurityHelper.GenerateSalt(); //获取混淆码加密过的密码 string passwordHash = SecurityHelper.EncodePassword(newPwd, passwordSalt); //SecurityHelper.EncodePassword(MySecurity.MD5(newPwd), passwordSalt); user.PasswordHash = passwordHash; user.PasswordSalt = passwordSalt; Guid rs = CommonOperate.OperateRecord <Sys_User>(user, ModelRecordOperateType.Edit, out errMsg, new List <string>() { "PasswordHash", "PasswordSalt" }, false); if (rs != Guid.Empty) //修改密码成功 { errMsg = TempUserOperate(userId, newPwd); } return(string.IsNullOrEmpty(errMsg)); }
/// <summary> /// 保存后 /// </summary> /// <param name="operateType"></param> /// <param name="t"></param> /// <param name="result"></param> /// <param name="currUser"></param> /// <param name="otherParams"></param> public void OperateCompeletedHandle(ModelRecordOperateType operateType, Sys_FormField t, bool result, Frame.Base.UserInfo currUser, object[] otherParams = null) { if (result) { string errMsg = string.Empty; Sys_FormField tempT = CommonOperate.GetEntityById <Sys_FormField>(t.Id, out errMsg); bool isFormEnableMemeryCache = ModelConfigHelper.IsModelEnableMemeryCache(typeof(Sys_Form)); //Sys_Form是否启动内存缓存 if (tempT.Sys_FormId.HasValue && isFormEnableMemeryCache) { Sys_Form form = SystemOperate.GetForm(tempT.Sys_FormId.Value); if (form != null) { form.FormFields = null; } } } }
/// <summary> /// 保存模块数据库配置 /// </summary> /// <param name="dbConfig">配置对象</param> /// <returns></returns> private string SaveModuleDbConfig(Sys_DbConfig dbConfig) { string errMsg = string.Empty; if (dbConfig != null) { try { string tableName = string.Empty; BaseDAL <Sys_Module> moduleDal = new BaseDAL <Sys_Module>(this.CurrUser); Sys_Module module = moduleDal.GetEntityById(out errMsg, dbConfig.Id); if (module == null || string.IsNullOrEmpty(module.TableName)) { tableName = tableIdDic.Where(x => x.Value == dbConfig.Id).FirstOrDefault().Key; } else { tableName = module.TableName; } if (string.IsNullOrWhiteSpace(tableName)) { return("找不到模块表!"); } string modelConfigPath = ModelConfigHelper.GetModelConfigXml(); string node = string.Format("/Root/{0}", tableName); bool nodeIsExists = XmlHelper.NodeIsExists(modelConfigPath, node); if (!nodeIsExists) //不存在实体节点配置信息,插入节点 { XmlHelper.Insert(modelConfigPath, "/Root", tableName, string.Empty, string.Empty); } XmlHelper.Update(modelConfigPath, node, "AutomaticPartition", dbConfig.AutomaticPartition ? "1" : "0"); XmlHelper.Update(modelConfigPath, node, "AutoReCreateIndex", dbConfig.AutoReCreateIndex ? "1" : "0"); XmlHelper.Update(modelConfigPath, node, "CreateIndexPageDensity", dbConfig.CreateIndexPageDensity.ObjToStr()); XmlHelper.Update(modelConfigPath, node, "readConnString", dbConfig.ReadConnString); XmlHelper.Update(modelConfigPath, node, "writeConnString", dbConfig.WriteConnString); TempDatabaseType dbType = (TempDatabaseType)Enum.Parse(typeof(DatabaseType), dbConfig.DbType.ToString()); XmlHelper.Update(modelConfigPath, node, "dbType", dbType.ToString()); } catch (Exception ex) { errMsg = ex.Message; } } return(errMsg); }
/// <summary> /// 操作完成 /// </summary> /// <param name="operateType"></param> /// <param name="t"></param> /// <param name="result"></param> /// <param name="currUser"></param> /// <param name="otherParams"></param> public void OperateCompeletedHandle(ModelRecordOperateType operateType, Sys_GridField t, bool result, UserInfo currUser, object[] otherParams = null) { if (result) { Sys_GridField tempT = SystemOperate.GetAllGridFields(x => x.Id == t.Id).FirstOrDefault(); bool isGridEnableMemeryCache = ModelConfigHelper.IsModelEnableMemeryCache(typeof(Sys_Grid)); //Sys_Grid是否启动内存缓存 if (tempT.Sys_GridId.HasValue && isGridEnableMemeryCache) { Sys_Grid grid = SystemOperate.GetGrid(tempT.Sys_GridId.Value); if (grid != null) { grid.GridFields = null; } } //string errMsg = string.Empty; //CommonOperate.UpdateRecordsByExpression<Sys_GridField>(new { FieldFormatter = "", EditorFormatter = "" }, x => x.Id == t.Id, out errMsg); } }
/// <summary> /// 保存模块缓存配置 /// </summary> /// <param name="cacheConfig">缓存配置对象</param> /// <returns></returns> private string SaveModuleCacheConfig(Sys_CacheConfig cacheConfig) { string errMsg = string.Empty; if (cacheConfig != null) { try { string tableName = string.Empty; BaseDAL <Sys_Module> moduleDal = new BaseDAL <Sys_Module>(this.CurrUser); Sys_Module module = moduleDal.GetEntity(out errMsg, x => x.Name == cacheConfig.ModuleName); if (module == null || string.IsNullOrEmpty(module.TableName)) { tableName = tableIdDic.Where(x => x.Value == cacheConfig.Id).FirstOrDefault().Key; } else { tableName = module.TableName; } if (string.IsNullOrWhiteSpace(tableName)) { return("找不到模块表!"); } string modelConfigPath = ModelConfigHelper.GetModelConfigXml(); string node = string.Format("/Root/{0}", tableName); bool nodeIsExists = XmlHelper.NodeIsExists(modelConfigPath, node); if (!nodeIsExists) //不存在实体节点配置信息,插入节点 { XmlHelper.Insert(modelConfigPath, "/Root", tableName, string.Empty, string.Empty); } XmlHelper.Update(modelConfigPath, node, "isEnableCache", cacheConfig.IsEnableCache ? "1" : "0"); XmlHelper.Update(modelConfigPath, node, "cacheType", cacheConfig.CacheType.ToString()); if (!cacheConfig.IsEnableCache) //不启用缓存时 { this.ClearCache(); } } catch (Exception ex) { errMsg = ex.Message; } } return(errMsg); }
/// <summary> /// 从xml配置文件中获取模块缓存配置 /// </summary> /// <param name="tableName">模块表名或类名</param> /// <param name="moduleName">模块名称</param> /// <param name="moduleId">模块ID</param> /// <returns></returns> private Sys_CacheConfig GetModuleCacheConfig(string tableName, string moduleName = null, Guid?moduleId = null) { //将未添加到模块表中的模块也加进来 List <Type> modelTypes = GetAllModelTypes(); Type modelType = modelTypes.Where(x => x.Name == tableName).FirstOrDefault(); Guid id = Guid.Empty; if (!moduleId.HasValue) { if (!tableIdDic.ContainsKey(tableName)) { Guid tempId = Guid.NewGuid(); tableIdDic.Add(tableName, tempId); id = tempId; } else { id = tableIdDic[tableName]; } } else { id = moduleId.Value; } Sys_CacheConfig cacheConfig = new Sys_CacheConfig() { Id = id, ModuleName = string.IsNullOrEmpty(moduleName) ? tableName : moduleName }; string cacheType = string.Empty; bool isEnableCache = ModelConfigHelper.IsEnableCache(modelType, out cacheType); if (string.IsNullOrEmpty(cacheType)) { cacheType = "0"; } TempCacheProviderType cacheTypeEnum = (TempCacheProviderType)Enum.Parse(typeof(TempCacheProviderType), cacheType); cacheConfig.IsEnableCache = isEnableCache; cacheConfig.CacheTypeOfEnum = cacheTypeEnum; return(cacheConfig); }
/// <summary> /// 删除用户 /// </summary> /// <param name="username">用户名</param> /// <returns></returns> public static string DelUser(string username) { string errMsg = string.Empty; if (ModelConfigHelper.ModelIsViewMode(typeof(Sys_User))) { errMsg = "用户管理模块为视图模块不允许删除!"; return(errMsg); } Sys_User user = CommonOperate.GetEntity <Sys_User>(x => x.UserName == username && !x.IsDeleted && x.IsValid && x.IsActivated, string.Empty, out errMsg); if (user == null) { return("非法用户!"); } bool rs = CommonOperate.DeleteRecordsByExpression <Sys_User>(x => x.UserName == username, out errMsg); if (rs) //用户删除成功后删除临时用户 { CommonOperate.DeleteRecordsByExpression <Sys_TempUser>(x => x.FieldInfo1 == user.Id.ToString(), out errMsg); } return(errMsg); }
/// <summary> /// 冻结账号 /// </summary> /// <param name="username">用户名</param> /// <returns></returns> public static string FrozenUser(string username) { string errMsg = string.Empty; if (ModelConfigHelper.ModelIsViewMode(typeof(Sys_User))) { errMsg = "用户管理模块为视图模式,不允许冻结!"; return(errMsg); } Sys_User user = CommonOperate.GetEntity <Sys_User>(x => x.UserName == username && !x.IsDeleted && x.IsValid && x.IsActivated, string.Empty, out errMsg); if (user == null) { return("非法用户!"); } user.IsValid = false; Guid rs = CommonOperate.OperateRecord <Sys_User>(user, ModelRecordOperateType.Edit, out errMsg, new List <string>() { "IsValid" }, false); return(errMsg); }
/// <summary> /// 取分布式锁(基于DB方式) /// </summary> /// <param name="moduleFlag">模块标识,模块表名/类名</param> /// <param name="method_Flag">方法名标识</param> /// <param name="expirtime">自定义过期时间(秒)</param> /// <param name="des">锁描述</param> /// <returns></returns> public static string DistributeDbLock(string moduleFlag, string method_Flag, double?expirtime = null, string des = null) { try { if (WebConfigHelper.GetAppSettingValue("EnabledDistributeLock") != "true") //未启用分布式锁 { return(string.Empty); } string hostname = System.Net.Dns.GetHostName(); //当前服务器 string processId = ApplicationObject.GetCurrentProcessId(); //当前进程 string threadId = ApplicationObject.GetCurrentThreadId(); //当前线程 lock (tempObjDistriLock) { string errMsg = string.Empty; int timeout = 30; //30秒超时 DateTime initTime = DateTime.Now; DatabaseType dbType = DatabaseType.MsSqlServer; string connStr = ModelConfigHelper.GetModelConnStr(typeof(Other_DistributedLock), out dbType, false); while ((DateTime.Now - initTime).TotalSeconds <= timeout) { double updateTimesamp = Globals.GetTimestamp(DateTime.Now); //当前时间戳 double invalidTimesamp = expirtime.HasValue && expirtime.Value > 0 ? updateTimesamp + expirtime.Value : updateTimesamp + 20; //过期时间戳 Other_DistributedLock methodLock = CommonOperate.GetEntity <Other_DistributedLock>(x => x.ModuleFlag == moduleFlag && x.Method_Flag == method_Flag && x.Invalid_Timesamp > updateTimesamp, null, out errMsg); //锁存在,继续循环再取 if (methodLock != null) { Thread.Sleep(10); continue; } //锁不存在,取得锁成功,插入锁标识 methodLock = new Other_DistributedLock() { ModuleFlag = moduleFlag, Method_Flag = method_Flag, Update_Timesamp = updateTimesamp, Invalid_Timesamp = invalidTimesamp, Maching = hostname, ProcessId = processId, ThreadId = threadId, Des = des }; TransactionTask tranAction = (conn) => { CommonOperate.DeleteRecordsByExpression <Other_DistributedLock>(x => x.ModuleFlag == moduleFlag && x.Method_Flag == method_Flag, out errMsg, false, connStr, dbType, conn); if (!string.IsNullOrEmpty(errMsg)) { throw new Exception(errMsg); } CommonOperate.OperateRecord <Other_DistributedLock>(methodLock, ModelRecordOperateType.Add, out errMsg, null, false, false, connStr, dbType, conn); if (!string.IsNullOrEmpty(errMsg)) { throw new Exception(errMsg); } }; CommonOperate.TransactionHandle(tranAction, out errMsg, connStr, dbType); //取锁成功 if (string.IsNullOrEmpty(errMsg)) { return(string.Empty); } else { WritLockLog(moduleFlag, method_Flag, errMsg); } //取锁失败,继续循环取 Thread.Sleep(10); } return("获取分布式锁超时"); //取锁失败 } } catch { return(string.Empty); } }
/// <summary> /// 添加用户 /// </summary> /// <param name="errMsg">异常信息</param> /// <param name="username">用户名</param> /// <param name="userpwd">用户密码</param> /// <param name="orgId">组织Id</param> /// <param name="aliasName">用户别名</param> /// <returns></returns> public static Guid AddUser(out string errMsg, string username, string userpwd, Guid?orgId = null, string aliasName = null) { errMsg = string.Empty; if (ModelConfigHelper.ModelIsViewMode(typeof(Sys_User))) { errMsg = "用户管理模块为视图模式,不允许添加!"; return(Guid.Empty); } if (string.IsNullOrWhiteSpace(username)) { errMsg = "用户名不能为空!"; return(Guid.Empty); } if (string.IsNullOrWhiteSpace(userpwd)) { errMsg = "用户密码不能为空!"; return(Guid.Empty); } Sys_User tempUser = CommonOperate.GetEntity <Sys_User>(x => x.UserName.ToLower() == username.Trim().ToLower(), null, out errMsg); if (tempUser != null) { errMsg = string.Format("用户【{0}】已存在!", username); return(Guid.Empty); } UserInfo adminUser = GetSuperAdmin(); //超级管理员用户 //获取混淆码 string passwordSalt = SecurityHelper.GenerateSalt(); //获取混淆码加密过的密码 string passwordHash = SecurityHelper.EncodePassword(userpwd, passwordSalt); //SecurityHelper.EncodePassword(MySecurity.MD5(userpwd), passwordSalt); Sys_User user = new Sys_User() { UserName = username, AliasName = aliasName, PasswordHash = passwordHash, PasswordSalt = passwordSalt, IsValid = true, IsActivated = true, ActivatedDate = DateTime.Now }; if (orgId.HasValue && orgId.Value != Guid.Empty) { user.Sys_OrganizationId = orgId.Value; } if (adminUser != null) { user.CreateUserName = adminUser.AliasName; user.CreateDate = DateTime.Now; user.CreateUserId = adminUser.UserId; user.ModifyUserName = adminUser.AliasName; user.ModifyDate = DateTime.Now; user.ModifyUserId = adminUser.UserId; } Guid userId = CommonOperate.OperateRecord <Sys_User>(user, ModelRecordOperateType.Add, out errMsg, null, false); //临时用户操作 if (userId != Guid.Empty) { TempUserOperate(userId, userpwd); } return(userId); }
/// <summary> /// 从xml配置文件中获取模块缓存配置 /// </summary> /// <param name="tableName">模块表名或类名</param> /// <param name="moduleName">模块名称</param> /// <param name="moduleId">模块ID</param> /// <returns></returns> private Sys_DbConfig GetModuleCacheConfig(string tableName, string moduleName = null, Guid?moduleId = null) { //将未添加到模块表中的模块也加进来 List <Type> modelTypes = GetAllModelTypes(); Type modelType = modelTypes.Where(x => x.Name == tableName).FirstOrDefault(); Guid id = Guid.Empty; if (!moduleId.HasValue) { if (!tableIdDic.ContainsKey(tableName)) { Guid tempId = Guid.NewGuid(); tableIdDic.Add(tableName, tempId); id = tempId; } else { id = tableIdDic[tableName]; } } else { id = moduleId.Value; } Sys_DbConfig dbConfig = new Sys_DbConfig() { Id = id, ModuleName = string.IsNullOrEmpty(moduleName) ? tableName : moduleName }; if (modelType == null) { return(dbConfig); } string dbTypeStr = WebConfigHelper.GetAppSettingValue("DbType"); if (string.IsNullOrEmpty(dbTypeStr)) { dbTypeStr = "0"; } TempDatabaseType dbType = (TempDatabaseType)Enum.Parse(typeof(TempDatabaseType), dbTypeStr); string tempDbTypeStr = string.Empty; string readConnStr = ModelConfigHelper.GetModelConnString(modelType, out tempDbTypeStr); string writeConnStr = ModelConfigHelper.GetModelConnString(modelType, out tempDbTypeStr, false); if (tempDbTypeStr != string.Empty) //实体配置了数据库类型 { try { dbType = (TempDatabaseType)Enum.Parse(typeof(DatabaseType), tempDbTypeStr); } catch { } } dbConfig.DbTypeOfEnum = dbType; dbConfig.ReadConnString = readConnStr; dbConfig.WriteConnString = writeConnStr; string modelConfigPath = ModelConfigHelper.GetModelConfigXml(); string node = string.Format("/Root/{0}", tableName); bool nodeIsExists = XmlHelper.NodeIsExists(modelConfigPath, node); if (!nodeIsExists) //不存在实体节点配置信息,找对应基类的节点配置信息 { //取实体基类 Type baseType = modelType.BaseType; if (baseType != null) //存在基类 { node = string.Format("/Root/{0}", baseType.Name); //基类节点 nodeIsExists = XmlHelper.NodeIsExists(modelConfigPath, node); } } if (!nodeIsExists) { return(dbConfig); } string autoReCreateIndex = XmlHelper.Read(modelConfigPath, node, "AutoReCreateIndex"); //是否自动重建索引 string createIndexPageDensity = XmlHelper.Read(modelConfigPath, node, "CreateIndexPageDensity"); //重建索引页密度 string automaticPartition = XmlHelper.Read(modelConfigPath, node, "AutomaticPartition"); //是否自动分区 string partitionInterval = XmlHelper.Read(modelConfigPath, node, "PartitionInterval"); //分区间隔记录数 dbConfig.AutoReCreateIndex = autoReCreateIndex.ObjToInt() == 1; dbConfig.CreateIndexPageDensity = createIndexPageDensity.ObjToInt(); dbConfig.AutomaticPartition = automaticPartition.ObjToInt() == 1; dbConfig.PartitionInterval = partitionInterval.ObjToInt(); return(dbConfig); }