|
|
|
@ -65,16 +65,20 @@ namespace Volo.Abp.PermissionManagement
|
|
|
|
|
return await GetInternalAsync(PermissionDefinitionManager.Get(permissionName), providerName, providerKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual async Task<MultiplePermissionWithGrantedProviders> GetAsync(string[] permissionNames, string providerName, string providerKey)
|
|
|
|
|
{
|
|
|
|
|
var permissionDefinitions = permissionNames.Select(x => PermissionDefinitionManager.Get(x)).ToArray();
|
|
|
|
|
return await GetInternalAsync(permissionDefinitions, providerName, providerKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual async Task<List<PermissionWithGrantedProviders>> GetAllAsync(string providerName, string providerKey)
|
|
|
|
|
{
|
|
|
|
|
var results = new List<PermissionWithGrantedProviders>();
|
|
|
|
|
var permissionDefinitions = PermissionDefinitionManager.GetPermissions().ToArray();
|
|
|
|
|
|
|
|
|
|
foreach (var permissionDefinition in PermissionDefinitionManager.GetPermissions())
|
|
|
|
|
{
|
|
|
|
|
results.Add(await GetInternalAsync(permissionDefinition, providerName, providerKey));
|
|
|
|
|
}
|
|
|
|
|
var multiplePermissionWithGrantedProviders = await GetInternalAsync(permissionDefinitions, providerName, providerKey);
|
|
|
|
|
|
|
|
|
|
return multiplePermissionWithGrantedProviders.Result;
|
|
|
|
|
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual async Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted)
|
|
|
|
@ -144,39 +148,53 @@ namespace Volo.Abp.PermissionManagement
|
|
|
|
|
|
|
|
|
|
protected virtual async Task<PermissionWithGrantedProviders> GetInternalAsync(PermissionDefinition permission, string providerName, string providerKey)
|
|
|
|
|
{
|
|
|
|
|
var result = new PermissionWithGrantedProviders(permission.Name, false);
|
|
|
|
|
var multiplePermissionWithGrantedProviders = await GetInternalAsync(new PermissionDefinition[]{permission}, providerName, providerKey);
|
|
|
|
|
|
|
|
|
|
if (!permission.IsEnabled)
|
|
|
|
|
{
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
return multiplePermissionWithGrantedProviders.Result.First();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!await SimpleStateCheckerManager.IsEnabledAsync(permission))
|
|
|
|
|
{
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
protected virtual async Task<MultiplePermissionWithGrantedProviders> GetInternalAsync(PermissionDefinition[] permissions, string providerName, string providerKey)
|
|
|
|
|
{
|
|
|
|
|
var permissionNames = permissions.Select(x => x.Name).ToArray();
|
|
|
|
|
var multiplePermissionWithGrantedProviders = new MultiplePermissionWithGrantedProviders(permissionNames);
|
|
|
|
|
|
|
|
|
|
if (!permission.MultiTenancySide.HasFlag(CurrentTenant.GetMultiTenancySide()))
|
|
|
|
|
var neededCheckPermissions = new List<PermissionDefinition>();
|
|
|
|
|
|
|
|
|
|
foreach (var permission in permissions
|
|
|
|
|
.Where(x => x.IsEnabled)
|
|
|
|
|
.Where(x => x.MultiTenancySide.HasFlag(CurrentTenant.GetMultiTenancySide()))
|
|
|
|
|
.Where(x => !x.Providers.Any() || x.Providers.Contains(providerName)))
|
|
|
|
|
{
|
|
|
|
|
return result;
|
|
|
|
|
if (await SimpleStateCheckerManager.IsEnabledAsync(permission))
|
|
|
|
|
{
|
|
|
|
|
neededCheckPermissions.Add(permission);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (permission.Providers.Any() && !permission.Providers.Contains(providerName))
|
|
|
|
|
if (!neededCheckPermissions.Any())
|
|
|
|
|
{
|
|
|
|
|
return result;
|
|
|
|
|
return multiplePermissionWithGrantedProviders;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (var provider in ManagementProviders)
|
|
|
|
|
{
|
|
|
|
|
var providerResult = await provider.CheckAsync(permission.Name, providerName, providerKey);
|
|
|
|
|
if (providerResult.IsGranted)
|
|
|
|
|
permissionNames = neededCheckPermissions.Select(x => x.Name).ToArray();
|
|
|
|
|
var multiplePermissionValueProviderGrantInfo = await provider.CheckAsync(permissionNames, providerName, providerKey);
|
|
|
|
|
|
|
|
|
|
foreach (var providerResultDict in multiplePermissionValueProviderGrantInfo.Result)
|
|
|
|
|
{
|
|
|
|
|
result.IsGranted = true;
|
|
|
|
|
result.Providers.Add(new PermissionValueProviderInfo(provider.Name, providerResult.ProviderKey));
|
|
|
|
|
if (providerResultDict.Value.IsGranted)
|
|
|
|
|
{
|
|
|
|
|
var permissionWithGrantedProvider = multiplePermissionWithGrantedProviders.Result
|
|
|
|
|
.First(x => x.Name == providerResultDict.Key);
|
|
|
|
|
|
|
|
|
|
permissionWithGrantedProvider.IsGranted = true;
|
|
|
|
|
permissionWithGrantedProvider.Providers.Add(new PermissionValueProviderInfo(provider.Name, providerResultDict.Value.ProviderKey));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
return multiplePermissionWithGrantedProviders;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|