The requested service 'Volo.Abp.PermissionManagement.PermissionManagementProvider' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
namespace SecurityDomainModule
{
[DependsOn(
typeof(AbpDddDomainModule),
typeof(SecurityDomainSharedModule),
typeof(AbpUsersDomainModule),
typeof(AbpUsersDomainSharedModule),
typeof(AbpPermissionManagementApplicationContractsModule),
typeof(AbpPermissionManagementDomainModule),
typeof(AbpPermissionManagementDomainSharedModule),
typeof(AbpPermissionManagementDomainIdentityModule),
typeof(AbpPermissionManagementApplicationContractsModule),
typeof(AbpPermissionManagementEntityFrameworkCoreModule)
)]
public class SecurityDomainModule : AbpModule
{
public SecurityDomainModule()
{
}
public override void PreConfigureServices(ServiceConfigurationContext context)
{
// ...
AutoAddPermissionManagementProviders(context.Services);
// ...
}
private static void AutoAddPermissionManagementProviders(IServiceCollection services)
{
services.Configure<PermissionManagementOptions>(options =>
{
options.ManagementProviders.Add<BusinessSegmentPermissionManagementProvider>();
options.ManagementProviders.Add<CustomPartnerPermissionmanagementProvider>();
options.ManagementProviders.Add<CustomTeamPermissionmanagementProvider>();
options.ManagementProviders.Add<PermissionManagementProvider>();
//options.ManagementProviders.Add<RolePermissionManagementProvider>();
// Role and User providers are already added by default. So not adding them here.
});
}
// ...
}
}
To reproduce the bug, I am trying below test case:
public async Task<List<PermissionWithGrantedProviders>> GetAllForRoleAsync(string roleName)
{
try
{
Check.NotNullOrEmpty(roleName, nameof(roleName));
var result = await RolePermissionManagerExtensions.GetAllForRoleAsync(_permissionManager, roleName);
return result;
}
catch (Exception ex)
{
//TODO log exception return null;
}
}
Calling RolePermissionManagerExtensions
method, however it gives an error saying PermissionManagementProvider
is not registered.
PermissionManagementProvider
is an abstract
class, so don't add it to options.ManagementProviders
.
private static void AutoAddPermissionManagementProviders(IServiceCollection services)
{
services.Configure<PermissionManagementOptions>(options =>
{
options.ManagementProviders.Add<BusinessSegmentPermissionManagementProvider>();
options.ManagementProviders.Add<CustomPartnerPermissionmanagementProvider>();
options.ManagementProviders.Add<CustomTeamPermissionmanagementProvider>();
options.ManagementProviders.Add<PermissionManagementProvider>(); // Remove this
// ...
});
}