|
|
|
@ -175,13 +175,15 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD |
|
|
|
{ |
|
|
|
var resourcePermissionDefinitions = await GetAvailablePermissionsAsync(resourceName); |
|
|
|
var resourcePermissionGrants = await ResourcePermissionGrantRepository.GetPermissionsAsync(resourceName, resourceKey); |
|
|
|
var unavailableProviderNames = await GetUnavailableManagementProviderNamesAsync(); |
|
|
|
var result = new List<PermissionWithGrantedProviders>(); |
|
|
|
foreach (var resourcePermissionDefinition in resourcePermissionDefinitions) |
|
|
|
{ |
|
|
|
var permissionWithGrantedProviders = new PermissionWithGrantedProviders(resourcePermissionDefinition.Name, false); |
|
|
|
|
|
|
|
var grantedPermissions = resourcePermissionGrants |
|
|
|
.Where(x => x.Name == resourcePermissionDefinition.Name && x.ResourceName == resourceName && x.ResourceKey == resourceKey) |
|
|
|
.Where(x => x.Name == resourcePermissionDefinition.Name && x.ResourceName == resourceName && x.ResourceKey == resourceKey |
|
|
|
&& !unavailableProviderNames.Contains(x.ProviderName)) |
|
|
|
.ToList(); |
|
|
|
|
|
|
|
if (grantedPermissions.Any()) |
|
|
|
@ -210,7 +212,10 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD |
|
|
|
{ |
|
|
|
var resourcePermissions = await GetAvailablePermissionsAsync(resourceName); |
|
|
|
var resourcePermissionGrants = await ResourcePermissionGrantRepository.GetPermissionsAsync(resourceName, resourceKey); |
|
|
|
resourcePermissionGrants = resourcePermissionGrants.Where(x => resourcePermissions.Any(rp => rp.Name == x.Name)).ToList(); |
|
|
|
var unavailableProviderNames = await GetUnavailableManagementProviderNamesAsync(); |
|
|
|
resourcePermissionGrants = resourcePermissionGrants |
|
|
|
.Where(x => resourcePermissions.Any(rp => rp.Name == x.Name) && !unavailableProviderNames.Contains(x.ProviderName)) |
|
|
|
.ToList(); |
|
|
|
var resourcePermissionGrantsGroup = resourcePermissionGrants.GroupBy(x => new { x.ProviderName, x.ProviderKey }); |
|
|
|
var result = new List<PermissionProviderWithPermissions>(); |
|
|
|
foreach (var resourcePermissionGrant in resourcePermissionGrantsGroup) |
|
|
|
@ -349,6 +354,12 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD |
|
|
|
|
|
|
|
public virtual async Task DeleteAsync(string resourceName, string resourceKey, string providerName, string providerKey) |
|
|
|
{ |
|
|
|
var provider = ManagementProviders.FirstOrDefault(m => m.Name == providerName); |
|
|
|
if (provider != null && !await provider.IsAvailableAsync()) |
|
|
|
{ |
|
|
|
throw new AbpException($"The resource permission management provider '{providerName}' is not available in the current context."); |
|
|
|
} |
|
|
|
|
|
|
|
var permissionGrants = await ResourcePermissionGrantRepository.GetListAsync(resourceName, resourceKey, providerName, providerKey); |
|
|
|
foreach (var permissionGrant in permissionGrants) |
|
|
|
{ |
|
|
|
@ -358,6 +369,12 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD |
|
|
|
|
|
|
|
public virtual async Task DeleteAsync(string name, string resourceName, string resourceKey, string providerName, string providerKey) |
|
|
|
{ |
|
|
|
var provider = ManagementProviders.FirstOrDefault(m => m.Name == providerName); |
|
|
|
if (provider != null && !await provider.IsAvailableAsync()) |
|
|
|
{ |
|
|
|
throw new AbpException($"The resource permission management provider '{providerName}' is not available in the current context."); |
|
|
|
} |
|
|
|
|
|
|
|
var permissionGrant = await ResourcePermissionGrantRepository.FindAsync(name, resourceName, resourceKey, providerName, providerKey); |
|
|
|
if (permissionGrant != null) |
|
|
|
{ |
|
|
|
@ -429,4 +446,30 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD |
|
|
|
|
|
|
|
return multiplePermissionWithGrantedProviders; |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual async Task<HashSet<string>> GetAvailableManagementProviderNamesAsync() |
|
|
|
{ |
|
|
|
var names = new HashSet<string>(); |
|
|
|
foreach (var provider in ManagementProviders) |
|
|
|
{ |
|
|
|
if (await provider.IsAvailableAsync()) |
|
|
|
{ |
|
|
|
names.Add(provider.Name); |
|
|
|
} |
|
|
|
} |
|
|
|
return names; |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual async Task<HashSet<string>> GetUnavailableManagementProviderNamesAsync() |
|
|
|
{ |
|
|
|
var names = new HashSet<string>(); |
|
|
|
foreach (var provider in ManagementProviders) |
|
|
|
{ |
|
|
|
if (!await provider.IsAvailableAsync()) |
|
|
|
{ |
|
|
|
names.Add(provider.Name); |
|
|
|
} |
|
|
|
} |
|
|
|
return names; |
|
|
|
} |
|
|
|
} |
|
|
|
|