backend/Magic.Core/Service/Menu/SysMenuService.cs

(开头部分) 18KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。



using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Magic.Core.Entity;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

using SqlSugar;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Magic.Core.Service;

/// <summary>
/// 系统菜单服务
/// </summary>
[ApiDescriptionSettings(Name = "Menu", Order = 146)]
public class SysMenuService : ISysMenuService, IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<SysMenu> _sysMenuRep;  // 菜单表仓储  

    private readonly ISysCacheService _sysCacheService;
    private readonly ISysUserRoleService _sysUserRoleService;
    private readonly ISysRoleMenuService _sysRoleMenuService;

    public SysMenuService(SqlSugarRepository<SysMenu> sysMenuRep,
                          ISysCacheService sysCacheService,
                          ISysUserRoleService sysUserRoleService,
                          ISysRoleMenuService sysRoleMenuService)
    {
        _sysMenuRep = sysMenuRep;
        _sysCacheService = sysCacheService;
        _sysUserRoleService = sysUserRoleService;
        _sysRoleMenuService = sysRoleMenuService;
    }

    /// <summary>
    /// 获取用户权限(按钮权限标识集合)
    /// </summary>
    /// <param name="userId"></param>
    /// <returns></returns>
    [NonAction]
    public async Task<List<string>> GetLoginPermissionList(long userId)
    {
        var permissions = await _sysCacheService.GetPermission(userId); // 先从缓存里面读取
        if (permissions == null || permissions.Count < 1)
        {
            if (!UserManager.IsSuperAdmin)
            {
                var roleIdList = await _sysUserRoleService.GetUserRoleIdList(userId);
                var menuIdList = await _sysRoleMenuService.GetRoleMenuIdList(roleIdList);
                permissions = await _sysMenuRep.Where(u => menuIdList.Contains(u.Id))
                                                           .Where(u => u.Type == (int)MenuType.BTN)
                                                           .Where(u => u.Status == (int)CommonStatus.ENABLE)
                                                           .Select(u => u.Permission).ToListAsync();
            }
后面还有 425 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。