You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
2.4 KiB

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); ;
}
}
}