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.
 
 
 
 
 

81 lines
2.7 KiB

using System;
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
namespace Sanhe.Abp.MenuManagement
{
public abstract class MenuManagementProvider : IMenuManagementProvider
{
protected IMenuGrantRepository MenuGrantRepository { get; }
protected IPermissionDefinitionManager PermissionDefinitionManager { get; }
protected IMenuGrantChecker MenuGrantChecker { get; }
protected IGuidGenerator GuidGenerator { get; }
protected ICurrentTenant CurrentTenant { get; }
public abstract string Name { get; }
protected MenuManagementProvider(IMenuGrantRepository menuGrantRepository,
IPermissionDefinitionManager permissionDefinitionManager,
IMenuGrantChecker menuGrantChecker,
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant)
{
MenuGrantRepository = menuGrantRepository;
PermissionDefinitionManager = permissionDefinitionManager;
MenuGrantChecker = menuGrantChecker;
GuidGenerator = guidGenerator;
CurrentTenant = currentTenant;
}
public virtual async Task<MenuGrantInfo> CheckAsync(Guid menuId, string providerName, string providerKey)
{
if (providerName != Name)
{
return MenuGrantInfo.NonGranted;
}
return new MenuGrantInfo(
(await MenuGrantChecker.CheckAsync(menuId, providerName, providerKey)).IsGranted,
providerKey
);
}
public virtual Task SetAsync(Guid menuId, string providerKey, bool isGranted)
{
return isGranted
? GrantAsync(menuId, providerKey)
: RevokeAsync(menuId, providerKey);
}
protected virtual async Task GrantAsync(Guid menuId, string providerKey)
{
var menuGrant = await MenuGrantRepository.FindAsync(menuId, Name, providerKey);
if (menuGrant != null)
{
return;
}
await MenuGrantRepository.InsertAsync(
new MenuGrant(
GuidGenerator.Create(),
menuId,
Name,
providerKey,
CurrentTenant.Id
)
);
}
protected virtual async Task RevokeAsync(Guid menuId, string providerKey)
{
var permissionGrant = await MenuGrantRepository.FindAsync(menuId, Name, providerKey);
if (permissionGrant == null)
{
return;
}
await MenuGrantRepository.DeleteAsync(permissionGrant);
}
}
}