using Bootstrap.Security; using Bootstrap.Security.DataAccess; using Longbow.Cache; using Longbow.Data; using System.Collections.Generic; using System.Linq; namespace Bootstrap.DataAccess { /// /// 菜单操作类 /// public static class MenuHelper { /// /// 通过指定角色ID相关菜单缓存键值 /// public const string RetrieveMenusByRoleIdDataKey = "MenuHelper-RetrieveMenusByRoleId"; /// /// 通过当前用户获取所有菜单数据缓存键名称 "BootstrapMenu-RetrieveMenus" /// public const string RetrieveMenusAll = DbHelper.RetrieveMenusAll; /// /// 保存菜单 /// /// /// public static bool Save(BootstrapMenu p) { // 不允许保存系统菜单与前台演示系统的默认菜单 if (DictHelper.RetrieveSystemModel() && (p.Category == "0" || p.Application == "2")) return true; var ret = DbContextManager.Create().Save(p); if (ret) CacheCleanUtility.ClearCache(menuIds: string.IsNullOrEmpty(p.Id) ? new List() : new List() { p.Id }); return ret; } /// /// 删除菜单 /// /// /// public static bool Delete(IEnumerable value) { if (DictHelper.RetrieveSystemModel()) { // 不允许删除系统菜单与前台演示系统的默认菜单 var systemMenus = RetrieveAllMenus("Admin").Where(m => m.Category == "0" || m.Application == "2"); value = value.Where(v => !systemMenus.Any(m => m.Id == v)); if (!value.Any()) return true; } var ret = DbContextManager.Create().Delete(value); if (ret) CacheCleanUtility.ClearCache(menuIds: value); return ret; } /// /// 通过用户名获得所有菜单 /// /// /// public static IEnumerable RetrieveMenusByUserName(string userName) => RetrieveAllMenus(userName); /// /// 通过角色获取相关菜单集合 /// /// /// public static IEnumerable RetrieveMenusByRoleId(string roleId) => CacheManager.GetOrAdd($"{RetrieveMenusByRoleIdDataKey}-{roleId}", k => DbContextManager.Create().RetrieveMenusByRoleId(roleId), RetrieveMenusByRoleIdDataKey); /// /// 保存指定角色的所有菜单 /// /// /// /// public static bool SaveMenusByRoleId(string roleId, IEnumerable menuIds) { var ret = DbContextManager.Create().SaveMenusByRoleId(roleId, menuIds); if (ret) CacheCleanUtility.ClearCache(menuIds: menuIds, roleIds: new List() { roleId }); return ret; } /// /// 获取指定用户的应用程序菜单 /// /// /// /// /// public static IEnumerable RetrieveAppMenus(string appId, string userName, string activeUrl) { var menus = RetrieveAllMenus(userName).Where(m => m.Category == "1" && m.IsResource == 0); if (appId != "0") menus = menus.Where(m => m.Application == appId); return DbHelper.CascadeMenus(menus, activeUrl); } /// /// 通过当前用户名获得后台菜单,层次化后集合 /// /// 当前登录的用户名 /// 当前访问菜单 /// public static IEnumerable RetrieveSystemMenus(string userName, string activeUrl = null) { var menus = RetrieveAllMenus(userName).Where(m => m.Category == "0" && m.IsResource == 0); return DbHelper.CascadeMenus(menus, activeUrl); } /// /// 通过当前用户名获得所有菜单,层次化后集合 /// /// /// public static IEnumerable RetrieveMenus(string userName) { var menus = RetrieveAllMenus(userName); return DbHelper.CascadeMenus(menus); } /// /// 通过用户获得所有菜单 /// /// /// public static IEnumerable RetrieveAllMenus(string userName) => CacheManager.GetOrAdd($"{RetrieveMenusAll}-{userName}", key => DbContextManager.Create().RetrieveAllMenus(userName), RetrieveMenusAll); } }