/// <summary> /// 已重载。调用Save时写日志,而调用Insert和Update时不写日志 /// </summary> /// <returns></returns> public override int Save() { if (!String.IsNullOrEmpty(Url)) { // 删除两端空白 if (Url != Url.Trim()) { Url = Url.Trim(); } } if (ID == 0) { WriteLog("添加", Name); } else { WriteLog("修改", Name); } int menuID = base.Save(); RoleMenu.CheckNonePerssion(menuID); return(menuID); }
/// <summary> /// 删除RoleMenu中无效的RoleID和无效的MenuID /// </summary> public static void ClearRoleMenu() { // 统计所有RoleID和MenuID List <TEntity> list1 = Meta.Cache.Entities; List <TMenuEntity> list2 = Menu <TMenuEntity> .Meta.Cache.Entities; StringBuilder sb = new StringBuilder(); if (list1 != null && list1.Count > 0) { sb.Append("RoleID Not in("); for (int i = 0; i < list1.Count; i++) { if (i > 0) { sb.Append(","); } sb.Append(list1[i].ID); } sb.Append(")"); } if (list2 != null && list2.Count > 0) { if (sb.Length > 0) { sb.Append(" Or "); } sb.Append("MenuID Not in("); for (int i = 0; i < list2.Count; i++) { if (i > 0) { sb.Append(","); } sb.Append(list2[i].ID); } sb.Append(")"); } if (sb.Length < 1) { return; } // 查询所有。之所以不是调用Delete删除,是为了引发RoleMenu里面的Delete写日志 EntityList <TRoleMenuEntity> rms = RoleMenu <TRoleMenuEntity> .FindAll(sb.ToString(), null, null, 0, 0); if (rms == null || rms.Count < 1) { return; } rms.Delete(); }
protected override void InitData() { base.InitData(); ClearRoleMenu(); // 如果角色菜单对应关系为空或者只有一个,则授权第一个角色访问所有菜单 //if (RoleMenu<TRoleMenuEntity>.Meta.Count > 1) return; EntityList <TMenuEntity> ms = null; // 等一下菜单那边初始化 for (int i = 0; i < 100; i++) { ms = Menu <TMenuEntity> .Meta.Cache.Entities; if (ms != null && ms.Count > 0) { break; } Thread.Sleep(100); } if (ms == null || ms.Count < 1) { return; } if (XTrace.Debug) { XTrace.WriteLine("开始初始化{0}授权数据……", typeof(TEntity).Name); } Meta.BeginTrans(); try { Int32 id = 1; EntityList <TEntity> rs = Meta.Cache.Entities; if (rs != null && rs.Count > 0) { id = rs[0].ID; } // 授权访问所有菜单 //EntityList<TMenuEntity> ms = Menu<TMenuEntity>.FindAll(); if (ms != null && ms.Count > 0) { EntityList <TRoleMenuEntity> rms = RoleMenu <TRoleMenuEntity> .FindAllByRoleID(id); foreach (TMenuEntity item in ms) { // 是否已存在 if (rms != null && rms.Exists(RoleMenu <TRoleMenuEntity> ._.MenuID, item.ID)) { continue; } //TRoleMenuEntity entity = new TRoleMenuEntity(); //entity.RoleID = id; //entity.MenuID = item.ID; TRoleMenuEntity entity = RoleMenu <TRoleMenuEntity> .Create(id, item.ID); entity.Save(); } } Meta.Commit(); if (XTrace.Debug) { XTrace.WriteLine("完成初始化{0}授权数据!", typeof(TEntity).Name); } } catch { Meta.Rollback(); throw; } }