Browse Source

Refactor resource permission key lookup to use names/ClientIds

pull/24515/head
maliming 1 month ago
parent
commit
562914fc69
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 1
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs
  2. 24
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs
  3. 6
      modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs
  4. 3
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/IClientFinder.cs
  5. 14
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientFinder.cs
  6. 2
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs
  7. 7
      modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs
  8. 7
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs
  9. 14
      modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo/Abp/PermissionManagement/IdentityServer/ClientResourcePermissionProviderKeyLookupService.cs
  10. 3
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Applications/IApplicationFinder.cs
  11. 14
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationFinder.cs
  12. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IOpenIddictApplicationRepository.cs
  13. 7
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/EfCoreOpenIddictApplicationRepository.cs
  14. 7
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs
  15. 14
      modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationResourcePermissionProviderKeyLookupService.cs

1
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs

@ -47,6 +47,7 @@ public class AbpAuthorizationModule : AbpModule
options.ResourceValueProviders.Add<UserResourcePermissionValueProvider>();
options.ResourceValueProviders.Add<RoleResourcePermissionValueProvider>();
options.ResourceValueProviders.Add<ClientResourcePermissionValueProvider>();
});
Configure<AbpVirtualFileSystemOptions>(options =>

24
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs

@ -35,10 +35,10 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency
{
page = page < 1 ? 1 : page;
var users = await IdentityUserRepository.GetListAsync(filter: filter, skipCount: (page - 1) * 10, maxResultCount: 10);
return users.Select(user => new UserFinderResult
return users.Select(x => new UserFinderResult
{
Id = user.Id,
UserName = user.UserName
Id = x.Id,
UserName = x.UserName
}).ToList();
}
}
@ -49,10 +49,10 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency
{
page = page < 1 ? 1 : page;
var roles = await IdentityRoleRepository.GetListAsync(filter: filter, skipCount: (page - 1) * 10, maxResultCount: 10);
return roles.Select(user => new RoleFinderResult
return roles.Select(x => new RoleFinderResult
{
Id = user.Id,
RoleName = user.Name
Id = x.Id,
RoleName = x.Name
}).ToList();
}
}
@ -62,10 +62,10 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency
using (IdentityUserRepository.DisableTracking())
{
var users = await IdentityUserRepository.GetListByIdsAsync(ids);
return users.Select(user => new UserFinderResult
return users.Select(x => new UserFinderResult
{
Id = user.Id,
UserName = user.UserName
Id = x.Id,
UserName = x.UserName
}).ToList();
}
}
@ -75,10 +75,10 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency
using (IdentityUserRepository.DisableTracking())
{
var roles = await IdentityRoleRepository.GetListAsync(names);
return roles.Select(user => new RoleFinderResult
return roles.Select(x => new RoleFinderResult
{
Id = user.Id,
RoleName = user.Name
Id = x.Id,
RoleName = x.Name
}).ToList();
}
}

6
modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs

@ -30,9 +30,9 @@ public class RoleResourcePermissionProviderKeyLookupService : IResourcePermissio
return roles.Select(r => new ResourcePermissionProviderKeyInfo(r.RoleName, r.RoleName)).ToList();
}
public virtual async Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string[] keys, CancellationToken cancellationToken = default)
public virtual Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string[] keys, CancellationToken cancellationToken = default)
{
var roles = await UserRoleFinder.SearchRoleByNamesAsync(keys.Distinct().ToArray());
return roles.Select(r => new ResourcePermissionProviderKeyInfo(r.RoleName, r.RoleName)).ToList();
// Keys are role names
return Task.FromResult(keys.Select(x => new ResourcePermissionProviderKeyInfo(x, x)).ToList());
}
}

3
modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/IClientFinder.cs

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
@ -7,6 +6,4 @@ namespace Volo.Abp.IdentityServer.Clients;
public interface IClientFinder
{
Task<List<ClientFinderResult>> SearchAsync(string filter, int page = 1);
Task<List<ClientFinderResult>> SearchByIdsAsync(Guid[] ids);
}

14
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientFinder.cs

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@ -29,17 +28,4 @@ public class ClientFinder : IClientFinder, ITransientDependency
}).ToList();
}
}
public virtual async Task<List<ClientFinderResult>> SearchByIdsAsync(Guid[] ids)
{
using (ClientRepository.DisableTracking())
{
var clients = await ClientRepository.GetListByIdsAsync(ids);
return clients.Select(x => new ClientFinderResult
{
Id = x.Id,
ClientId = x.ClientId
}).ToList();
}
}
}

2
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs

@ -36,6 +36,4 @@ public interface IClientRepository : IBasicRepository<Client, Guid>
Guid? expectedId = null,
CancellationToken cancellationToken = default
);
Task<List<Client>> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default);
}

7
modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs

@ -61,13 +61,6 @@ public class ClientRepository : EfCoreRepository<IIdentityServerDbContext, Clien
return await (await GetDbSetAsync()).AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, GetCancellationToken(cancellationToken));
}
public virtual async Task<List<Client>> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default)
{
return await (await GetDbSetAsync())
.Where(c => ids.Contains(c.Id))
.ToListAsync(GetCancellationToken(cancellationToken));
}
public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default)
{
var dbContext = await GetDbContextAsync();

7
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs

@ -69,11 +69,4 @@ public class MongoClientRepository : MongoDbRepository<IAbpIdentityServerMongoDb
return await (await GetQueryableAsync(cancellationToken))
.AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, GetCancellationToken(cancellationToken));
}
public virtual async Task<List<Client>> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(cancellationToken))
.Where(c => ids.Contains(c.Id))
.ToListAsync(GetCancellationToken(cancellationToken));
}
}

14
modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo/Abp/PermissionManagement/IdentityServer/ClientResourcePermissionProviderKeyLookupService.cs

@ -28,18 +28,12 @@ public class ClientResourcePermissionProviderKeyLookupService : IResourcePermiss
public virtual async Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default)
{
var clients = await ClientFinder.SearchAsync(filter, page);
return clients.Select(x => new ResourcePermissionProviderKeyInfo(x.Id.ToString(), x.ClientId)).ToList();
return clients.Select(x => new ResourcePermissionProviderKeyInfo(x.ClientId, x.ClientId)).ToList();
}
public virtual async Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string[] keys, CancellationToken cancellationToken = default)
public virtual Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string[] keys, CancellationToken cancellationToken = default)
{
var ids = keys
.Select(key => Guid.TryParse(key, out var id) ? (Guid?)id : null)
.Where(id => id.HasValue)
.Select(id => id.Value)
.Distinct()
.ToArray();
var clients = await ClientFinder.SearchByIdsAsync(ids.ToArray());
return clients.Select(x => new ResourcePermissionProviderKeyInfo(x.Id.ToString(), x.ClientId)).ToList();
// Keys are ClientIds
return Task.FromResult(keys.Select(x => new ResourcePermissionProviderKeyInfo(x, x)).ToList());
}
}

3
modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Applications/IApplicationFinder.cs

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
@ -7,6 +6,4 @@ namespace Volo.Abp.OpenIddict.Applications;
public interface IApplicationFinder
{
Task<List<ApplicationFinderResult>> SearchAsync(string filter, int page = 1);
Task<List<ApplicationFinderResult>> SearchByIdsAsync(Guid[] ids);
}

14
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationFinder.cs

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@ -29,17 +28,4 @@ public class AbpApplicationFinder : IApplicationFinder, ITransientDependency
}).ToList();
}
}
public virtual async Task<List<ApplicationFinderResult>> SearchByIdsAsync(Guid[] ids)
{
using (ApplicationRepository.DisableTracking())
{
var applications = await ApplicationRepository.GetListByIdsAsync(ids);
return applications.Select(x => new ApplicationFinderResult
{
Id = x.Id,
ClientId = x.ClientId
}).ToList();
}
}
}

2
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IOpenIddictApplicationRepository.cs

@ -19,6 +19,4 @@ public interface IOpenIddictApplicationRepository : IBasicRepository<OpenIddictA
Task<List<OpenIddictApplication>> FindByRedirectUriAsync(string address, CancellationToken cancellationToken = default);
Task<List<OpenIddictApplication>> ListAsync(int? count, int? offset, CancellationToken cancellationToken = default);
Task<List<OpenIddictApplication>> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default);
}

7
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/EfCoreOpenIddictApplicationRepository.cs

@ -62,11 +62,4 @@ public class EfCoreOpenIddictApplicationRepository : EfCoreRepository<IOpenIddic
.TakeIf<OpenIddictApplication, IQueryable<OpenIddictApplication>>(count.HasValue, count)
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictApplication>> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default)
{
return await (await GetDbSetAsync())
.Where(x => ids.Contains(x.Id))
.ToListAsync(GetCancellationToken(cancellationToken));
}
}

7
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs

@ -64,11 +64,4 @@ public class MongoOpenIddictApplicationRepository : MongoDbRepository<OpenIddict
.TakeIf<OpenIddictApplication, IQueryable<OpenIddictApplication>>(count.HasValue, count)
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictApplication>> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(cancellationToken))
.Where(x => ids.Contains(x.Id))
.ToListAsync(GetCancellationToken(cancellationToken));
}
}

14
modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationResourcePermissionProviderKeyLookupService.cs

@ -29,18 +29,12 @@ public class ApplicationResourcePermissionProviderKeyLookupService : IResourcePe
public virtual async Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default)
{
var applications = await ApplicationFinder.SearchAsync(filter, page);
return applications.Select(x => new ResourcePermissionProviderKeyInfo(x.Id.ToString(), x.ClientId)).ToList();
return applications.Select(x => new ResourcePermissionProviderKeyInfo(x.ClientId, x.ClientId)).ToList();
}
public virtual async Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string[] keys, CancellationToken cancellationToken = default)
public virtual Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string[] keys, CancellationToken cancellationToken = default)
{
var ids = keys
.Select(key => Guid.TryParse(key, out var id) ? (Guid?)id : null)
.Where(id => id.HasValue)
.Select(id => id.Value)
.Distinct()
.ToArray();
var applications = await ApplicationFinder.SearchByIdsAsync(ids.ToArray());
return applications.Select(x => new ResourcePermissionProviderKeyInfo(x.Id.ToString(), x.ClientId)).ToList();
// Keys are ClientIds
return Task.FromResult(keys.Select(x => new ResourcePermissionProviderKeyInfo(x, x)).ToList());
}
}

Loading…
Cancel
Save