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