Abp Vnext 的 Vue3 实现版本
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.
 
 
 
 
 
 

149 lines
5.7 KiB

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CompanyName.ProjectName.Roles.Dtos;
using Volo.Abp.PermissionManagement;
namespace CompanyName.ProjectName.Roles
{
public class RolePermissionAppService : ProjectNameAppService, IRolePermissionAppService
{
private readonly IPermissionAppService _rolePermissionAppService;
public RolePermissionAppService(IPermissionAppService rolePermissionAppService)
{
_rolePermissionAppService = rolePermissionAppService;
}
/// <summary>
/// 获取所有权限
/// </summary>
/// <returns></returns>
public async Task<PermissionOutput> GetPermissionAsync(GetPermissionInput input)
{
var permissions =
await _rolePermissionAppService.GetAsync(input.ProviderName, input.ProviderKey);
return BuildTreeData(permissions.Groups);
}
/// <summary>
/// 更新权限
/// </summary>
/// <param name="input"></param>
public async Task UpdatePermissionAsync(UpdateRolePermissionsInput input)
{
await _rolePermissionAppService.UpdateAsync(input.ProviderName, input.ProviderKey,
input.UpdatePermissionsDto);
}
/// <summary>
/// 生成权限树
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private PermissionOutput BuildTreeData(List<PermissionGroupDto> input)
{
var result = new PermissionOutput();
var excludes = new List<string>
{
"AbpIdentity.Users.ManagePermissions",
"FeatureManagement",
"FeatureManagement.ManageHostFeatures",
// "AbpTenantManagement",
// "AbpTenantManagement.Tenants",
// "AbpTenantManagement.Tenants.Create",
// "AbpTenantManagement.Tenants.Update",
// "AbpTenantManagement.Tenants.Delete",
"AbpTenantManagement.Tenants.ManageFeatures",
// "AbpTenantManagement.Tenants.ManageConnectionStrings",
"SettingManagement",
"SettingManagement.Emailing",
"SettingUi"
};
var permissions = new List<PermissionTreeDto>();
foreach (var group in input)
{
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"
? L["Permission:SystemManagement"]
: group.DisplayName;
foreach (var item in group.Permissions)
{
result.AllGrants.Add(item.Name);
if (item.IsGranted)
{
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
});
}
groupPermission.Children.Add(managementPermission);
}
}
}
permissions.Add(groupPermission);
}
result.Permissions = permissions;
var settingUIPermisstion = "SettingUi.ShowSettingPage";
// https://github.com/EasyAbp/Abp.SettingUi/blob/develop/src/EasyAbp.Abp.SettingUi.Application/SettingUiAppService.cs
// 因为使用的SettingUI模块,想把权限添加到系统管理下
result.Permissions.First(e => e.Key == "AbpIdentity").Children.Add(
new PermissionTreeDto()
{
Key = settingUIPermisstion,
Title = L["Permission:SettingUi:ShowSettingPage"]
});
result.AllGrants.Add(settingUIPermisstion);
var setting = input.First(e => e.Name == "SettingUi").Permissions
.First(e => e.Name == settingUIPermisstion);
if (setting.IsGranted)
{
result.Grants.Add(settingUIPermisstion);
}
return result;
}
}
}