0
mahsundag created
Hi,
I want to create a data seeder to add roles and pre-defined permissions.
So, I plan to include two new custom roles and their corresponding permissions.
For instance, "Employer" and "Contractor" as roles, and permissions to access Blazor pages.
I require a step-by-step solution, preferably with existing code tailored to my needs.
Adding a new user and setting existing roles with predefined permissions is my goal.
- ABP Framework version: v8.0.4
- UI Type: Blazor Server
- Database System: EF Core (PostgreSQL)
- Tiered (for MVC) or Auth Server Separated (for Angular): no
- Exception message and full stack trace:
- Steps to reproduce the issue:
1 Answer(s)
-
0
hi
A
DataSeedContributor
to add two roles and add all permissions to these roles.You can give it a try.
https://docs.abp.io/en/abp/latest/Data-Seeding
using System; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; using Volo.Abp.Identity; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; using Volo.Abp.Uow; public class MyDataSeedContributor : IDataSeedContributor, ITransientDependency { protected IGuidGenerator GuidGenerator { get; } protected IIdentityRoleRepository RoleRepository { get; } protected IIdentityUserRepository UserRepository { get; } protected ILookupNormalizer LookupNormalizer { get; } protected IdentityUserManager UserManager { get; } protected IdentityRoleManager RoleManager { get; } protected ICurrentTenant CurrentTenant { get; } protected IOptions<IdentityOptions> IdentityOptions { get; } protected IPermissionDefinitionManager PermissionDefinitionManager { get; } protected IPermissionDataSeeder PermissionDataSeeder { get; } public MyDataSeedContributor( IGuidGenerator guidGenerator, IIdentityRoleRepository roleRepository, IIdentityUserRepository userRepository, ILookupNormalizer lookupNormalizer, IdentityUserManager userManager, IdentityRoleManager roleManager, ICurrentTenant currentTenant, IOptions<IdentityOptions> identityOptions, IPermissionDefinitionManager permissionDefinitionManager, IPermissionDataSeeder permissionDataSeeder) { GuidGenerator = guidGenerator; RoleRepository = roleRepository; UserRepository = userRepository; LookupNormalizer = lookupNormalizer; UserManager = userManager; RoleManager = roleManager; CurrentTenant = currentTenant; IdentityOptions = identityOptions; PermissionDefinitionManager = permissionDefinitionManager; PermissionDataSeeder = permissionDataSeeder; } [UnitOfWork] public virtual async Task SeedAsync(DataSeedContext context) { var tenantId = context.TenantId; using (CurrentTenant.Change(tenantId)) { await IdentityOptions.SetAsync(); // "Employer" and "Contractor" roles const string employerRoleName = "Employer"; const string contractorRoleName = "Contractor"; var employerRoleNameRole = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName(employerRoleName)); if (employerRoleNameRole == null) { employerRoleNameRole = new IdentityRole(GuidGenerator.Create(), employerRoleName, tenantId) { IsPublic = true }; (await RoleManager.CreateAsync(employerRoleNameRole)).CheckErrors(); } var contractorRoleNameRole = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName(contractorRoleName)); if (contractorRoleNameRole == null) { contractorRoleNameRole = new IdentityRole(GuidGenerator.Create(), contractorRoleName, tenantId) { IsPublic = true }; (await RoleManager.CreateAsync(contractorRoleNameRole)).CheckErrors(); } var yourUser = await UserRepository.FindAsync(Guid.NewGuid());//your user id (await UserManager.AddToRoleAsync(yourUser, employerRoleName)).CheckErrors(); (await UserManager.AddToRoleAsync(yourUser, contractorRoleName)).CheckErrors(); var multiTenancySide = CurrentTenant.GetMultiTenancySide(); var allPermissionNames = (await PermissionDefinitionManager.GetPermissionsAsync()) .Where(p => p.MultiTenancySide.HasFlag(multiTenancySide)) .Select(p => p.Name) .ToArray(); await PermissionDataSeeder.SeedAsync( RolePermissionValueProvider.ProviderName, employerRoleName, allPermissionNames, context?.TenantId ); await PermissionDataSeeder.SeedAsync( RolePermissionValueProvider.ProviderName, contractorRoleName, allPermissionNames, context?.TenantId ); } } }