2019-05-17 16:36:17 +08:00
|
|
|
|
using Bootstrap.Security;
|
2018-10-28 23:35:23 +08:00
|
|
|
|
using Bootstrap.Security.DataAccess;
|
2018-10-28 15:03:59 +08:00
|
|
|
|
using Longbow.Cache;
|
2018-10-19 23:09:52 +08:00
|
|
|
|
using Longbow.Data;
|
|
|
|
|
using System.Collections.Generic;
|
2018-10-28 20:50:01 +08:00
|
|
|
|
using System.Linq;
|
2018-10-19 23:09:52 +08:00
|
|
|
|
|
|
|
|
|
namespace Bootstrap.DataAccess
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
/// 菜单操作类
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
public static class MenuHelper
|
|
|
|
|
{
|
2018-10-28 15:03:59 +08:00
|
|
|
|
/// <summary>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
/// 通过指定角色ID相关菜单缓存键值
|
2018-10-28 15:03:59 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
public const string RetrieveMenusByRoleIdDataKey = "MenuHelper-RetrieveMenusByRoleId";
|
2018-10-31 12:08:57 +08:00
|
|
|
|
|
2018-10-28 15:03:59 +08:00
|
|
|
|
/// <summary>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
/// 通过当前用户获取所有菜单数据缓存键名称 "BootstrapMenu-RetrieveMenus"
|
2018-10-28 15:03:59 +08:00
|
|
|
|
/// </summary>
|
2019-07-01 19:04:33 +08:00
|
|
|
|
public const string RetrieveMenusAll = DbHelper.RetrieveMenusAll;
|
2018-10-31 12:08:57 +08:00
|
|
|
|
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <summary>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
/// 保存菜单
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
2018-10-31 12:08:57 +08:00
|
|
|
|
/// <param name="p"></param>
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <returns></returns>
|
2019-01-11 23:20:28 +08:00
|
|
|
|
public static bool Save(BootstrapMenu p)
|
2018-10-31 12:08:57 +08:00
|
|
|
|
{
|
2019-06-19 18:04:48 +08:00
|
|
|
|
// 不允许保存系统菜单与前台演示系统的默认菜单
|
|
|
|
|
if (DictHelper.RetrieveSystemModel() && (p.Category == "0" || p.Application == "2")) return true;
|
2019-06-01 16:57:33 +08:00
|
|
|
|
|
2019-01-11 23:20:28 +08:00
|
|
|
|
var ret = DbContextManager.Create<Menu>().Save(p);
|
2018-10-31 12:08:57 +08:00
|
|
|
|
if (ret) CacheCleanUtility.ClearCache(menuIds: string.IsNullOrEmpty(p.Id) ? new List<string>() : new List<string>() { p.Id });
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <summary>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
/// 删除菜单
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
/// <returns></returns>
|
2019-01-11 23:20:28 +08:00
|
|
|
|
public static bool Delete(IEnumerable<string> value)
|
2018-10-31 12:08:57 +08:00
|
|
|
|
{
|
2019-03-26 17:12:18 +08:00
|
|
|
|
if (DictHelper.RetrieveSystemModel())
|
|
|
|
|
{
|
2019-05-17 16:36:17 +08:00
|
|
|
|
// 不允许删除系统菜单与前台演示系统的默认菜单
|
2019-06-01 16:57:33 +08:00
|
|
|
|
var systemMenus = RetrieveAllMenus("Admin").Where(m => m.Category == "0" || m.Application == "2");
|
2019-03-26 17:12:18 +08:00
|
|
|
|
value = value.Where(v => !systemMenus.Any(m => m.Id == v));
|
|
|
|
|
if (!value.Any()) return true;
|
|
|
|
|
}
|
2019-01-11 23:20:28 +08:00
|
|
|
|
var ret = DbContextManager.Create<Menu>().Delete(value);
|
2018-10-31 12:08:57 +08:00
|
|
|
|
if (ret) CacheCleanUtility.ClearCache(menuIds: value);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <summary>
|
2018-10-28 20:50:01 +08:00
|
|
|
|
/// 通过用户名获得所有菜单
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="userName"></param>
|
|
|
|
|
/// <returns></returns>
|
2018-10-28 20:50:01 +08:00
|
|
|
|
public static IEnumerable<BootstrapMenu> RetrieveMenusByUserName(string userName) => RetrieveAllMenus(userName);
|
2018-10-31 12:08:57 +08:00
|
|
|
|
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <summary>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
/// 通过角色获取相关菜单集合
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
2018-10-28 15:03:59 +08:00
|
|
|
|
/// <param name="roleId"></param>
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <returns></returns>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
public static IEnumerable<string> RetrieveMenusByRoleId(string roleId) => CacheManager.GetOrAdd($"{RetrieveMenusByRoleIdDataKey}-{roleId}", k => DbContextManager.Create<Menu>().RetrieveMenusByRoleId(roleId), RetrieveMenusByRoleIdDataKey);
|
2018-10-31 12:08:57 +08:00
|
|
|
|
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <summary>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
/// 保存指定角色的所有菜单
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
2018-10-31 12:08:57 +08:00
|
|
|
|
/// <param name="roleId"></param>
|
|
|
|
|
/// <param name="menuIds"></param>
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <returns></returns>
|
2018-10-31 12:08:57 +08:00
|
|
|
|
public static bool SaveMenusByRoleId(string roleId, IEnumerable<string> menuIds)
|
|
|
|
|
{
|
2019-01-11 23:20:28 +08:00
|
|
|
|
var ret = DbContextManager.Create<Menu>().SaveMenusByRoleId(roleId, menuIds);
|
2018-10-31 12:08:57 +08:00
|
|
|
|
if (ret) CacheCleanUtility.ClearCache(menuIds: menuIds, roleIds: new List<string>() { roleId });
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <summary>
|
2019-08-10 17:12:45 +08:00
|
|
|
|
/// 获取指定用户的应用程序菜单
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
2019-03-11 15:45:38 +08:00
|
|
|
|
/// <param name="appId"></param>
|
|
|
|
|
/// <param name="userName"></param>
|
2018-10-28 20:50:01 +08:00
|
|
|
|
/// <param name="activeUrl"></param>
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <returns></returns>
|
2018-10-28 20:50:01 +08:00
|
|
|
|
public static IEnumerable<BootstrapMenu> RetrieveAppMenus(string appId, string userName, string activeUrl)
|
|
|
|
|
{
|
|
|
|
|
var menus = RetrieveAllMenus(userName).Where(m => m.Category == "1" && m.IsResource == 0);
|
2019-01-11 23:20:28 +08:00
|
|
|
|
if (appId != "0") menus = menus.Where(m => m.Application == appId);
|
2019-02-21 13:16:18 +08:00
|
|
|
|
return DbHelper.CascadeMenus(menus, activeUrl);
|
2018-10-28 20:50:01 +08:00
|
|
|
|
}
|
2018-10-31 12:08:57 +08:00
|
|
|
|
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <summary>
|
2018-10-28 20:50:01 +08:00
|
|
|
|
/// 通过当前用户名获得后台菜单,层次化后集合
|
|
|
|
|
/// </summary>
|
2019-08-15 09:29:47 +08:00
|
|
|
|
/// <param name="userName">当前登录的用户名</param>
|
2018-10-28 20:50:01 +08:00
|
|
|
|
/// <param name="activeUrl">当前访问菜单</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static IEnumerable<BootstrapMenu> RetrieveSystemMenus(string userName, string activeUrl = null)
|
|
|
|
|
{
|
|
|
|
|
var menus = RetrieveAllMenus(userName).Where(m => m.Category == "0" && m.IsResource == 0);
|
2019-02-21 13:16:18 +08:00
|
|
|
|
return DbHelper.CascadeMenus(menus, activeUrl);
|
2018-10-28 20:50:01 +08:00
|
|
|
|
}
|
2018-10-31 12:08:57 +08:00
|
|
|
|
|
2018-10-28 20:50:01 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 通过当前用户名获得所有菜单,层次化后集合
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="userName"></param>
|
|
|
|
|
/// <returns></returns>
|
2019-03-11 15:45:38 +08:00
|
|
|
|
public static IEnumerable<BootstrapMenu> RetrieveMenus(string userName)
|
2018-10-28 20:50:01 +08:00
|
|
|
|
{
|
|
|
|
|
var menus = RetrieveAllMenus(userName);
|
2019-01-11 23:20:28 +08:00
|
|
|
|
return DbHelper.CascadeMenus(menus);
|
2018-10-28 20:50:01 +08:00
|
|
|
|
}
|
2018-10-31 12:08:57 +08:00
|
|
|
|
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <summary>
|
2018-10-28 20:50:01 +08:00
|
|
|
|
/// 通过用户获得所有菜单
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// </summary>
|
2018-10-28 20:50:01 +08:00
|
|
|
|
/// <param name="userName"></param>
|
2018-10-19 23:09:52 +08:00
|
|
|
|
/// <returns></returns>
|
2019-03-11 15:45:38 +08:00
|
|
|
|
public static IEnumerable<BootstrapMenu> RetrieveAllMenus(string userName) => CacheManager.GetOrAdd($"{RetrieveMenusAll}-{userName}", key => DbContextManager.Create<Menu>().RetrieveAllMenus(userName), RetrieveMenusAll);
|
2018-10-19 23:09:52 +08:00
|
|
|
|
}
|
|
|
|
|
}
|