/// <summary> /// 新增模块。 /// </summary> /// <param name="dto">待新增模块的信息。</param> /// <returns>新模块的Id。(-2:Tag重复。)</returns> public static string InsertModule(ModuleDTO dto) { Module existingM = GetModuleByTag(dto.Tag); if (existingM != null) { return "-2"; } Db.SessionFactory.EvictQueries("Module"); //模块基本信息。 Module m = new Module(); m.Id = IdGen.GetNextId(typeof(Module)); m.Tag = dto.Tag; m.Name = dto.Name; m.Remark = dto.Remark; m.OrderId = dto.OrderId; m.ModuleUrl = dto.ModuleUrl; m.Disabled = dto.Disabled; //模块分类。 ModuleType mt = Db.Session.Load(typeof(ModuleType), dto.ModuleTypeId) as ModuleType; mt.AddModule(m); //获取新增模块权限的主键值。 string[] Ids = null; if (dto.ModuleRights.Count > 0) Ids = IdGen.GetNextId(typeof(ModuleRight), dto.ModuleRights.Count); //向数据库保存模块和模块权限。 ITransaction transaction = Db.Session.BeginTransaction(); try { Db.Session.Save(m); for (int i = 0; i < dto.ModuleRights.Count; i++) { ModuleRight mr = new ModuleRight(); mr.Id = Ids[i]; mr.RightTag = dto.ModuleRights[i].ToString(); m.AddModuleRight(mr); Db.Session.Save(mr); } transaction.Commit(); } catch { transaction.Rollback(); throw; } //返回新模块的Id。 return m.Id; }
/// <summary> /// 更新模块。 /// </summary> /// <param name="dto">待更新模块的信息。</param> /// <returns>成功标示。(1:成功;-2:Tag重复。)</returns> public static string UpdateModule(ModuleDTO dto) { Module existingM = GetModuleByTag(dto.Tag); if (existingM != null && existingM.Id != dto.Id) { return "-2"; } Db.SessionFactory.EvictQueries("Module"); //模块基本信息。 Module m = Db.Session.Load(typeof(Module), dto.Id) as Module; m.Tag = dto.Tag; m.Name = dto.Name; m.Remark = dto.Remark; m.OrderId = dto.OrderId; m.ModuleUrl = dto.ModuleUrl; m.Disabled = dto.Disabled; //待删除的权限。 ArrayList ToBeRemoved = new ArrayList(); IDictionaryEnumerator ide = m.ModuleRights.GetEnumerator(); while (ide.MoveNext()) { string key = ((DictionaryEntry)ide.Current).Key.ToString(); bool isFind = false; for (int i = 0; i < dto.ModuleRights.Count; i++) { if (key == dto.ModuleRights[i].ToString()) { isFind = true; break; } } if (!isFind) { ToBeRemoved.Add(key); } } //待增加的权限。 ArrayList ToBeAdded = new ArrayList(); for (int i = 0; i < dto.ModuleRights.Count; i++) { if (!m.ModuleRights.Contains(dto.ModuleRights[i].ToString())) ToBeAdded.Add(dto.ModuleRights[i].ToString()); } //获取新增模块权限的主键值。 string[] Ids = null; if (ToBeAdded.Count > 0) Ids = IdGen.GetNextId(typeof(ModuleRight), ToBeAdded.Count); //向数据库保存新的模块信息和模块权限信息。 ITransaction transaction = Db.Session.BeginTransaction(); try { //删除权限。 foreach (object key in ToBeRemoved) { ModuleRight mr = m.ModuleRights[key] as ModuleRight; mr.RemoveAllPermissions(); mr.BreakAwayFromModule(); Db.Session.Delete(mr); } //增加权限。 for (int i = 0; i < ToBeAdded.Count; i++) { ModuleRight newMr = new ModuleRight(); newMr.Id = Ids[i]; newMr.RightTag = ToBeAdded[i].ToString(); m.AddModuleRight(newMr); Db.Session.Save(newMr); } Db.Session.Update(m); transaction.Commit(); return "1"; } catch { transaction.Rollback(); throw; } }