Abp模块
abp
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.
 
 
 
 
 

60 lines
2.0 KiB

using System;
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Guids;
using Volo.Abp.Identity;
using Volo.Abp.MultiTenancy;
namespace Sanhe.Abp.MenuManagement.Identity
{
public class RoleMenuManagementProvider : MenuManagementProvider
{
private readonly IUserRoleFinder _userRoleFinder;
public RoleMenuManagementProvider(
IMenuGrantRepository menuGrantRepository,
IPermissionDefinitionManager permissionDefinitionManager,
IMenuGrantChecker menuGrantChecker,
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant,
IUserRoleFinder userRoleFinder) :
base(menuGrantRepository,
permissionDefinitionManager,
menuGrantChecker,
guidGenerator,
currentTenant)
{
_userRoleFinder = userRoleFinder;
}
public override string Name => RolePermissionValueProvider.ProviderName;
public override async Task<MenuGrantInfo> CheckAsync(Guid menuId, string providerName, string providerKey)
{
if (providerName == Name)
{
return new MenuGrantInfo(
(await MenuGrantChecker.CheckAsync(menuId, providerName, providerKey)).IsGranted,
providerKey
);
}
if (providerName == UserPermissionValueProvider.ProviderName)
{
var userId = Guid.Parse(providerKey);
var roleNames = await _userRoleFinder.GetRolesAsync(userId);
foreach (var roleName in roleNames)
{
var grantCache = await MenuGrantChecker.CheckAsync(menuId, Name, roleName);
if (grantCache.IsGranted)
{
return new MenuGrantInfo(true, roleName);
}
}
}
return MenuGrantInfo.NonGranted;
}
}
}