|
|
|
|
using Autofac;
|
|
|
|
|
using Common.Const;
|
|
|
|
|
using Common.Enum;
|
|
|
|
|
using HybirdFrameworkCore.Autofac;
|
|
|
|
|
using HybirdFrameworkCore.Autofac.Attribute;
|
|
|
|
|
using HybirdFrameworkCore.Redis;
|
|
|
|
|
using Repository.System;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
|
|
|
|
|
namespace Service.Mgr
|
|
|
|
|
{
|
|
|
|
|
[Scope("SingleInstance")]
|
|
|
|
|
public class SysMenuMgr
|
|
|
|
|
{
|
|
|
|
|
private readonly SysMenuRepository _sysMenuRep;
|
|
|
|
|
private readonly SysUserRoleRepository _sysUserRoleRep;
|
|
|
|
|
private readonly SysRoleMenuRepository _sysRoleMenuRep;
|
|
|
|
|
public SysMenuMgr(
|
|
|
|
|
SysMenuRepository sysMenuRep,
|
|
|
|
|
SysUserRoleRepository sysUserRoleRep,
|
|
|
|
|
SysRoleMenuRepository sysRoleMenuRep
|
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
_sysMenuRep = sysMenuRep;
|
|
|
|
|
_sysUserRoleRep = sysUserRoleRep;
|
|
|
|
|
_sysRoleMenuRep = sysRoleMenuRep;
|
|
|
|
|
}
|
|
|
|
|
RedisHelper redisHelper = AppInfo.Container.Resolve<RedisHelper>();
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取用户拥有按钮权限集合(缓存) 🔖
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[DisplayName("获取按钮权限集合")]
|
|
|
|
|
public async Task<List<string>> GetOwnBtnPermList()
|
|
|
|
|
{
|
|
|
|
|
var userId = UserManager.UserId;
|
|
|
|
|
var permissions = redisHelper.GetStrListValue(RedisConstMgr.KeyUserButton + userId);
|
|
|
|
|
if (permissions.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
var menuIdList = UserManager.SuperAdmin ? new List<long>() : await GetMenuIdList();
|
|
|
|
|
permissions = menuIdList.Count > 0 || UserManager.SuperAdmin
|
|
|
|
|
? await _sysMenuRep.QueryListByClauseAsync<string>(
|
|
|
|
|
u => u.Type == MenuTypeEnum.Btn,
|
|
|
|
|
menuIdList.Count > 0, u => menuIdList.Contains(u.Id),
|
|
|
|
|
u => u.Permission)
|
|
|
|
|
: new List<string>();
|
|
|
|
|
redisHelper.SetListInRedis(RedisConstMgr.KeyUserButton + userId, permissions);
|
|
|
|
|
}
|
|
|
|
|
return permissions;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取当前用户菜单Id集合
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private async Task<List<long>> GetMenuIdList()
|
|
|
|
|
{
|
|
|
|
|
var roleIdList = await _sysUserRoleRep.QueryByClauseAsync(u => u.UserId == UserManager.UserId, u => u.RoleId);
|
|
|
|
|
return await _sysRoleMenuRep.QueryByClauseAsync(u => roleIdList.Contains(u.RoleId), u => u.MenuId); ;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|