Browse Source

菜单无限级递归

pull/16/head
王军 4 years ago
parent
commit
6c604e8cec
  1. 13
      aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/Pages/Login.cshtml.cs
  2. 76
      aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RolePermissionAppService.cs

13
aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/Pages/Login.cshtml.cs

@ -1,11 +1,13 @@
using System;
using System.Threading.Tasks;
using CompanyName.ProjectName.ConfigurationOptions;
using CompanyName.ProjectName.Users;
using CompanyName.ProjectName.Users.Dtos;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace CompanyName.ProjectName.Pages
@ -15,13 +17,16 @@ namespace CompanyName.ProjectName.Pages
private readonly IAccountAppService _accountAppService;
private readonly ILogger<Login> _logger;
private readonly IHostEnvironment _hostEnvironment;
public Login(IAccountAppService accountAppService, ILogger<Login> logger,
IHostEnvironment hostEnvironment)
private readonly JwtOptions _jwtOptions;
public Login(IAccountAppService accountAppService,
ILogger<Login> logger,
IHostEnvironment hostEnvironment,
IOptionsSnapshot<JwtOptions> jwtOptions)
{
_accountAppService = accountAppService;
_logger = logger;
_hostEnvironment = hostEnvironment;
_jwtOptions = jwtOptions.Value;
}
public void OnGet()
@ -41,7 +46,7 @@ namespace CompanyName.ProjectName.Pages
{
var options = new CookieOptions
{
Expires = DateTime.Now.AddHours(2),
Expires = DateTime.Now.AddHours(_jwtOptions.ExpirationTime),
SameSite = SameSiteMode.Unspecified,
};

76
aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RolePermissionAppService.cs

@ -69,18 +69,18 @@ namespace CompanyName.ProjectName.Roles
foreach (var group in input)
{
if (excludes.Any(e => e == group.Name))
{
continue;
}
if (excludes.Any(e => e == group.Name)) continue;
// 获取分组信息
var groupPermission = new PermissionTreeDto
{ Key = @group.Name, Title = @group.DisplayName };
groupPermission.Key = group.Name;
groupPermission.Title =
group.Name == "AbpIdentity"
{
Key = @group.Name,
Title = @group.Name == "AbpIdentity"
? L["Permission:SystemManagement"]
: group.DisplayName;
: @group.DisplayName
};
// 获取所有已授权和未授权权限集合
foreach (var item in group.Permissions)
{
result.AllGrants.Add(item.Name);
@ -88,41 +88,12 @@ namespace CompanyName.ProjectName.Roles
{
result.Grants.Add(item.Name);
}
//获取ParentName=null的权限
var management = group.Permissions
.Where(e => string.IsNullOrWhiteSpace(e.ParentName)).ToList();
foreach (var managementItem in management)
{
if (groupPermission.Children.Any(e => e.Key == managementItem.Name))
{
continue;
}
{
var managementPermission = new PermissionTreeDto()
{
Key = managementItem.Name,
Title = managementItem.DisplayName
};
// 获取management下权限
var childrenPermission = @group.Permissions
.Where(e => e.ParentName == managementItem.Name)
.ToList();
foreach (var childrenPermissionItem in childrenPermission)
{
managementPermission.Children.Add(new PermissionTreeDto()
{
Key = childrenPermissionItem.Name,
Title = childrenPermissionItem.DisplayName
});
}
// 递归菜单
var childTreeMenu = RecursionMenu(group.Permissions, null);
groupPermission.Children.Add(managementPermission);
}
}
}
groupPermission.Children.AddRange(childTreeMenu.Children);
permissions.Add(groupPermission);
}
@ -149,5 +120,28 @@ namespace CompanyName.ProjectName.Roles
return result;
}
/// <summary>
/// 递归菜单
/// </summary>
private PermissionTreeDto RecursionMenu(List<PermissionGrantInfoDto> permissionGrantInfoDtos,
string parentName)
{
var tree = new PermissionTreeDto();
var permissions = permissionGrantInfoDtos
.Where(e => e.ParentName == parentName).ToList();
foreach (var item in permissions)
{
var child = new PermissionTreeDto
{
Key = item.Name,
Title = item.DisplayName
};
child.Children.AddRange(RecursionMenu(permissionGrantInfoDtos, item.Name).Children);
tree.Children.Add(child);
}
return tree;
}
}
}
Loading…
Cancel
Save