refactor: 重构 菜单服务
This commit is contained in:
parent
08df8d8da0
commit
3f6834de5f
|
@ -18,13 +18,16 @@ class NavigationService : INavigation
|
||||||
|
|
||||||
private const string NavigationServiceGetMenusByRoleIdCacheKey = "NavigationService-GetMenusByRoleId";
|
private const string NavigationServiceGetMenusByRoleIdCacheKey = "NavigationService-GetMenusByRoleId";
|
||||||
|
|
||||||
private IDatabase Database { get; }
|
private IDBManager DBManager { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="db"></param>
|
/// <param name="db"></param>
|
||||||
public NavigationService(IDatabase db) => Database = db;
|
public NavigationService(IDBManager db)
|
||||||
|
{
|
||||||
|
DBManager = db;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获得指定用户名可访问的所有菜单集合
|
/// 获得指定用户名可访问的所有菜单集合
|
||||||
|
@ -33,9 +36,10 @@ class NavigationService : INavigation
|
||||||
/// <returns>未层次化的菜单集合</returns>
|
/// <returns>未层次化的菜单集合</returns>
|
||||||
public List<Navigation> GetAllMenus(string userName) => CacheManager.GetOrAdd($"{NavigationServiceGetAllCacheKey}-{userName}", entry =>
|
public List<Navigation> GetAllMenus(string userName) => CacheManager.GetOrAdd($"{NavigationServiceGetAllCacheKey}-{userName}", entry =>
|
||||||
{
|
{
|
||||||
|
using var db = DBManager.Create();
|
||||||
// 缓存所有菜单数据移除 SQL 语句降低复杂度
|
// 缓存所有菜单数据移除 SQL 语句降低复杂度
|
||||||
var order = Database.Provider.EscapeSqlIdentifier("Order");
|
var order = db.Provider.EscapeSqlIdentifier("Order");
|
||||||
return Database.Fetch<Models.Navigation>($"select n.ID, n.ParentId, n.Name, n.{order}, n.Icon, n.Url, n.Category, n.Target, n.IsResource, n.Application from Navigations n inner join (select nr.NavigationID from Users u inner join UserRole ur on ur.UserID = u.ID inner join NavigationRole nr on nr.RoleID = ur.RoleID where u.UserName = @UserName union select nr.NavigationID from Users u inner join UserGroup ug on u.ID = ug.UserID inner join RoleGroup rg on rg.GroupID = ug.GroupID inner join NavigationRole nr on nr.RoleID = rg.RoleID where u.UserName = @UserName union select n.ID from Navigations n where EXISTS (select UserName from Users u inner join UserRole ur on u.ID = ur.UserID inner join Roles r on ur.RoleID = r.ID where u.UserName = @UserName and r.RoleName = @RoleName)) nav on n.ID = nav.NavigationID ORDER BY n.Application, n.{order}", new { UserName = userName, RoleName = "Administrators" });
|
return db.Fetch<Models.Navigation>($"select n.ID, n.ParentId, n.Name, n.{order}, n.Icon, n.Url, n.Category, n.Target, n.IsResource, n.Application from Navigations n inner join (select nr.NavigationID from Users u inner join UserRole ur on ur.UserID = u.ID inner join NavigationRole nr on nr.RoleID = ur.RoleID where u.UserName = @UserName union select nr.NavigationID from Users u inner join UserGroup ug on u.ID = ug.UserID inner join RoleGroup rg on rg.GroupID = ug.GroupID inner join NavigationRole nr on nr.RoleID = rg.RoleID where u.UserName = @UserName union select n.ID from Navigations n where EXISTS (select UserName from Users u inner join UserRole ur on u.ID = ur.UserID inner join Roles r on ur.RoleID = r.ID where u.UserName = @UserName and r.RoleName = @RoleName)) nav on n.ID = nav.NavigationID ORDER BY n.Application, n.{order}", new { UserName = userName, RoleName = "Administrators" });
|
||||||
});
|
});
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -43,7 +47,11 @@ class NavigationService : INavigation
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="roleId"></param>
|
/// <param name="roleId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<string> GetMenusByRoleId(string? roleId) => CacheManager.GetOrAdd($"{NavigationServiceGetMenusByRoleIdCacheKey}-{roleId}", entry => Database.Fetch<string>("select NavigationID from NavigationRole where RoleID = @0", roleId));
|
public List<string> GetMenusByRoleId(string? roleId) => CacheManager.GetOrAdd($"{NavigationServiceGetMenusByRoleIdCacheKey}-{roleId}", entry =>
|
||||||
|
{
|
||||||
|
using var db = DBManager.Create();
|
||||||
|
return db.Fetch<string>("select NavigationID from NavigationRole where RoleID = @0", roleId);
|
||||||
|
});
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
|
@ -54,17 +62,18 @@ class NavigationService : INavigation
|
||||||
public bool SaveMenusByRoleId(string? roleId, List<string> menuIds)
|
public bool SaveMenusByRoleId(string? roleId, List<string> menuIds)
|
||||||
{
|
{
|
||||||
var ret = false;
|
var ret = false;
|
||||||
|
using var db = DBManager.Create();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Database.BeginTransaction();
|
db.BeginTransaction();
|
||||||
Database.Execute("delete from NavigationRole where RoleID = @0", roleId);
|
db.Execute("delete from NavigationRole where RoleID = @0", roleId);
|
||||||
Database.InsertBatch("NavigationRole", menuIds.Select(g => new { NavigationID = g, RoleID = roleId }));
|
db.InsertBatch("NavigationRole", menuIds.Select(g => new { NavigationID = g, RoleID = roleId }));
|
||||||
Database.CompleteTransaction();
|
db.CompleteTransaction();
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
Database.AbortTransaction();
|
db.AbortTransaction();
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
Loading…
Reference in New Issue