Browse Source

Merge pull request #5443 from abpframework/maliming/patch-seed

Change tenant id when seed user,role and permission grant.
pull/5448/head
Halil İbrahim Kalkan 5 years ago
committed by GitHub
parent
commit
5d6cd362f6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 79
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeeder.cs
  2. 26
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityDataSeeder_Tests.cs
  3. 42
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDataSeeder.cs
  4. 33
      modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionDataSeeder_Tests.cs

79
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeeder.cs

@ -3,6 +3,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
namespace Volo.Abp.Identity
@ -15,6 +16,7 @@ namespace Volo.Abp.Identity
protected ILookupNormalizer LookupNormalizer { get; }
protected IdentityUserManager UserManager { get; }
protected IdentityRoleManager RoleManager { get; }
protected ICurrentTenant CurrentTenant { get; }
public IdentityDataSeeder(
IGuidGenerator guidGenerator,
@ -22,7 +24,8 @@ namespace Volo.Abp.Identity
IIdentityUserRepository userRepository,
ILookupNormalizer lookupNormalizer,
IdentityUserManager userManager,
IdentityRoleManager roleManager)
IdentityRoleManager roleManager,
ICurrentTenant currentTenant)
{
GuidGenerator = guidGenerator;
RoleRepository = roleRepository;
@ -30,6 +33,7 @@ namespace Volo.Abp.Identity
LookupNormalizer = lookupNormalizer;
UserManager = userManager;
RoleManager = roleManager;
CurrentTenant = currentTenant;
}
[UnitOfWork]
@ -43,52 +47,55 @@ namespace Volo.Abp.Identity
var result = new IdentityDataSeedResult();
//"admin" user
const string adminUserName = "admin";
var adminUser = await UserRepository.FindByNormalizedUserNameAsync(
LookupNormalizer.NormalizeName(adminUserName)
);
if (adminUser != null)
using (CurrentTenant.Change(tenantId))
{
return result;
}
//"admin" user
const string adminUserName = "admin";
var adminUser = await UserRepository.FindByNormalizedUserNameAsync(
LookupNormalizer.NormalizeName(adminUserName)
);
adminUser = new IdentityUser(
GuidGenerator.Create(),
adminUserName,
adminEmail,
tenantId
)
{
Name = adminUserName
};
(await UserManager.CreateAsync(adminUser, adminPassword)).CheckErrors();
result.CreatedAdminUser = true;
if (adminUser != null)
{
return result;
}
//"admin" role
const string adminRoleName = "admin";
var adminRole = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName(adminRoleName));
if (adminRole == null)
{
adminRole = new IdentityRole(
adminUser = new IdentityUser(
GuidGenerator.Create(),
adminRoleName,
adminUserName,
adminEmail,
tenantId
)
{
IsStatic = true,
IsPublic = true
Name = adminUserName
};
(await RoleManager.CreateAsync(adminRole)).CheckErrors();
result.CreatedAdminRole = true;
}
(await UserManager.CreateAsync(adminUser, adminPassword)).CheckErrors();
result.CreatedAdminUser = true;
//"admin" role
const string adminRoleName = "admin";
var adminRole = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName(adminRoleName));
if (adminRole == null)
{
adminRole = new IdentityRole(
GuidGenerator.Create(),
adminRoleName,
tenantId
)
{
IsStatic = true,
IsPublic = true
};
(await UserManager.AddToRoleAsync(adminUser, adminRoleName)).CheckErrors();
(await RoleManager.CreateAsync(adminRole)).CheckErrors();
result.CreatedAdminRole = true;
}
return result;
(await UserManager.AddToRoleAsync(adminUser, adminRoleName)).CheckErrors();
return result;
}
}
}
}

26
modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityDataSeeder_Tests.cs

@ -1,7 +1,9 @@
using System.Threading.Tasks;
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Shouldly;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
using Xunit;
namespace Volo.Abp.Identity
@ -13,6 +15,7 @@ namespace Volo.Abp.Identity
private readonly IIdentityUserRepository _userRepository;
private readonly IIdentityRoleRepository _roleRepository;
private readonly ILookupNormalizer _lookupNormalizer;
private readonly ICurrentTenant _currentTenant;
protected IdentityDataSeeder_Tests()
{
@ -20,6 +23,7 @@ namespace Volo.Abp.Identity
_userRepository = GetRequiredService<IIdentityUserRepository>();
_roleRepository = GetRequiredService<IIdentityRoleRepository>();
_lookupNormalizer = GetRequiredService<ILookupNormalizer>();
_currentTenant = GetRequiredService<ICurrentTenant>();
}
[Fact]
@ -31,5 +35,25 @@ namespace Volo.Abp.Identity
(await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin"))).Name.ShouldBe("admin");
(await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("admin"))).ShouldNotBeNull();
}
[Fact]
public async Task Should_Create_Admin_User_And_Role_With_TenantId()
{
var tenantId = Guid.NewGuid();
await _identityDataSeeder.SeedAsync("admin@tenant.abp.io", "1q2w3E*", tenantId);
(await _userRepository.FindByNormalizedEmailAsync(_lookupNormalizer.NormalizeEmail("admin@tenant.abp.io"))).ShouldBeNull();
using (_currentTenant.Change(tenantId))
{
(await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin"))).ShouldNotBeNull();
(await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin"))).Name.ShouldBe("admin");
(await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin"))).TenantId.ShouldBe(tenantId);
(await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("admin"))).ShouldNotBeNull();
(await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("admin"))).TenantId.ShouldBe(tenantId);
}
}
}
}

42
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDataSeeder.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.PermissionManagement
{
@ -11,37 +12,44 @@ namespace Volo.Abp.PermissionManagement
protected IPermissionGrantRepository PermissionGrantRepository { get; }
protected IGuidGenerator GuidGenerator { get; }
protected ICurrentTenant CurrentTenant { get; }
public PermissionDataSeeder(
IPermissionGrantRepository permissionGrantRepository,
IGuidGenerator guidGenerator)
IPermissionGrantRepository permissionGrantRepository,
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant)
{
PermissionGrantRepository = permissionGrantRepository;
GuidGenerator = guidGenerator;
CurrentTenant = currentTenant;
}
public virtual async Task SeedAsync(
string providerName,
string providerName,
string providerKey,
IEnumerable<string> grantedPermissions,
Guid? tenantId = null)
{
foreach (var permissionName in grantedPermissions)
using (CurrentTenant.Change(tenantId))
{
if (await PermissionGrantRepository.FindAsync(permissionName, providerName, providerKey) != null)
foreach (var permissionName in grantedPermissions)
{
continue;
}
if (await PermissionGrantRepository.FindAsync(permissionName, providerName, providerKey) != null)
{
continue;
}
await PermissionGrantRepository.InsertAsync(
new PermissionGrant(
GuidGenerator.Create(),
permissionName,
providerName,
providerKey,
tenantId
)
);
await PermissionGrantRepository.InsertAsync(
new PermissionGrant(
GuidGenerator.Create(),
permissionName,
providerName,
providerKey,
tenantId
)
);
}
}
}
}
}
}

33
modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionDataSeeder_Tests.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.MultiTenancy;
using Xunit;
namespace Volo.Abp.PermissionManagement
@ -11,11 +12,13 @@ namespace Volo.Abp.PermissionManagement
{
private readonly IPermissionDataSeeder _permissionDataSeeder;
private readonly IPermissionGrantRepository _grantpermissionGrantRepository;
private readonly ICurrentTenant _currentTenant;
public PermissionDataSeeder_Tests()
{
_permissionDataSeeder = GetRequiredService<IPermissionDataSeeder>();
_grantpermissionGrantRepository = GetRequiredService<IPermissionGrantRepository>();
_currentTenant = GetRequiredService<ICurrentTenant>();
}
[Fact]
@ -32,7 +35,37 @@ namespace Volo.Abp.PermissionManagement
(await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test")).ShouldNotBeNull();
(await _grantpermissionGrantRepository.FindAsync("MyPermission2", "Test", "Test")).ShouldNotBeNull();
}
[Fact]
public async Task Seed_With_TenantId()
{
//Seed without tenant
await _permissionDataSeeder.SeedAsync("Test", "Test", new List<string>()
{
"MyPermission1",
"MyPermission2"
});
var tenantId = Guid.NewGuid();
using (_currentTenant.Change(tenantId))
{
(await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test")).ShouldBeNull();
(await _grantpermissionGrantRepository.FindAsync("MyPermission2", "Test", "Test")).ShouldBeNull();
}
await _permissionDataSeeder.SeedAsync("Test", "Test", new List<string>()
{
"MyPermission1",
"MyPermission2"
}, tenantId);
using (_currentTenant.Change(tenantId))
{
(await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test")).ShouldNotBeNull();
(await _grantpermissionGrantRepository.FindAsync("MyPermission2", "Test", "Test")).ShouldNotBeNull();
}
}
}
}

Loading…
Cancel
Save