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 6 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 Microsoft.AspNetCore.Identity;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids; using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow; using Volo.Abp.Uow;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
@ -15,6 +16,7 @@ namespace Volo.Abp.Identity
protected ILookupNormalizer LookupNormalizer { get; } protected ILookupNormalizer LookupNormalizer { get; }
protected IdentityUserManager UserManager { get; } protected IdentityUserManager UserManager { get; }
protected IdentityRoleManager RoleManager { get; } protected IdentityRoleManager RoleManager { get; }
protected ICurrentTenant CurrentTenant { get; }
public IdentityDataSeeder( public IdentityDataSeeder(
IGuidGenerator guidGenerator, IGuidGenerator guidGenerator,
@ -22,7 +24,8 @@ namespace Volo.Abp.Identity
IIdentityUserRepository userRepository, IIdentityUserRepository userRepository,
ILookupNormalizer lookupNormalizer, ILookupNormalizer lookupNormalizer,
IdentityUserManager userManager, IdentityUserManager userManager,
IdentityRoleManager roleManager) IdentityRoleManager roleManager,
ICurrentTenant currentTenant)
{ {
GuidGenerator = guidGenerator; GuidGenerator = guidGenerator;
RoleRepository = roleRepository; RoleRepository = roleRepository;
@ -30,6 +33,7 @@ namespace Volo.Abp.Identity
LookupNormalizer = lookupNormalizer; LookupNormalizer = lookupNormalizer;
UserManager = userManager; UserManager = userManager;
RoleManager = roleManager; RoleManager = roleManager;
CurrentTenant = currentTenant;
} }
[UnitOfWork] [UnitOfWork]
@ -43,52 +47,55 @@ namespace Volo.Abp.Identity
var result = new IdentityDataSeedResult(); var result = new IdentityDataSeedResult();
//"admin" user using (CurrentTenant.Change(tenantId))
const string adminUserName = "admin";
var adminUser = await UserRepository.FindByNormalizedUserNameAsync(
LookupNormalizer.NormalizeName(adminUserName)
);
if (adminUser != null)
{ {
return result; //"admin" user
} const string adminUserName = "admin";
var adminUser = await UserRepository.FindByNormalizedUserNameAsync(
LookupNormalizer.NormalizeName(adminUserName)
);
adminUser = new IdentityUser( if (adminUser != null)
GuidGenerator.Create(), {
adminUserName, return result;
adminEmail, }
tenantId
)
{
Name = adminUserName
};
(await UserManager.CreateAsync(adminUser, adminPassword)).CheckErrors();
result.CreatedAdminUser = true;
//"admin" role adminUser = new IdentityUser(
const string adminRoleName = "admin";
var adminRole = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName(adminRoleName));
if (adminRole == null)
{
adminRole = new IdentityRole(
GuidGenerator.Create(), GuidGenerator.Create(),
adminRoleName, adminUserName,
adminEmail,
tenantId tenantId
) )
{ {
IsStatic = true, Name = adminUserName
IsPublic = true
}; };
(await RoleManager.CreateAsync(adminRole)).CheckErrors(); (await UserManager.CreateAsync(adminUser, adminPassword)).CheckErrors();
result.CreatedAdminRole = true; 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 Microsoft.AspNetCore.Identity;
using Shouldly; using Shouldly;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
using Xunit; using Xunit;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
@ -13,6 +15,7 @@ namespace Volo.Abp.Identity
private readonly IIdentityUserRepository _userRepository; private readonly IIdentityUserRepository _userRepository;
private readonly IIdentityRoleRepository _roleRepository; private readonly IIdentityRoleRepository _roleRepository;
private readonly ILookupNormalizer _lookupNormalizer; private readonly ILookupNormalizer _lookupNormalizer;
private readonly ICurrentTenant _currentTenant;
protected IdentityDataSeeder_Tests() protected IdentityDataSeeder_Tests()
{ {
@ -20,6 +23,7 @@ namespace Volo.Abp.Identity
_userRepository = GetRequiredService<IIdentityUserRepository>(); _userRepository = GetRequiredService<IIdentityUserRepository>();
_roleRepository = GetRequiredService<IIdentityRoleRepository>(); _roleRepository = GetRequiredService<IIdentityRoleRepository>();
_lookupNormalizer = GetRequiredService<ILookupNormalizer>(); _lookupNormalizer = GetRequiredService<ILookupNormalizer>();
_currentTenant = GetRequiredService<ICurrentTenant>();
} }
[Fact] [Fact]
@ -31,5 +35,25 @@ namespace Volo.Abp.Identity
(await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin"))).Name.ShouldBe("admin"); (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin"))).Name.ShouldBe("admin");
(await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("admin"))).ShouldNotBeNull(); (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 System.Threading.Tasks;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids; using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.PermissionManagement namespace Volo.Abp.PermissionManagement
{ {
@ -11,37 +12,44 @@ namespace Volo.Abp.PermissionManagement
protected IPermissionGrantRepository PermissionGrantRepository { get; } protected IPermissionGrantRepository PermissionGrantRepository { get; }
protected IGuidGenerator GuidGenerator { get; } protected IGuidGenerator GuidGenerator { get; }
protected ICurrentTenant CurrentTenant { get; }
public PermissionDataSeeder( public PermissionDataSeeder(
IPermissionGrantRepository permissionGrantRepository, IPermissionGrantRepository permissionGrantRepository,
IGuidGenerator guidGenerator) IGuidGenerator guidGenerator,
ICurrentTenant currentTenant)
{ {
PermissionGrantRepository = permissionGrantRepository; PermissionGrantRepository = permissionGrantRepository;
GuidGenerator = guidGenerator; GuidGenerator = guidGenerator;
CurrentTenant = currentTenant;
} }
public virtual async Task SeedAsync( public virtual async Task SeedAsync(
string providerName, string providerName,
string providerKey, string providerKey,
IEnumerable<string> grantedPermissions, IEnumerable<string> grantedPermissions,
Guid? tenantId = null) 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( await PermissionGrantRepository.InsertAsync(
new PermissionGrant( new PermissionGrant(
GuidGenerator.Create(), GuidGenerator.Create(),
permissionName, permissionName,
providerName, providerName,
providerKey, providerKey,
tenantId 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.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Shouldly; using Shouldly;
using Volo.Abp.MultiTenancy;
using Xunit; using Xunit;
namespace Volo.Abp.PermissionManagement namespace Volo.Abp.PermissionManagement
@ -11,11 +12,13 @@ namespace Volo.Abp.PermissionManagement
{ {
private readonly IPermissionDataSeeder _permissionDataSeeder; private readonly IPermissionDataSeeder _permissionDataSeeder;
private readonly IPermissionGrantRepository _grantpermissionGrantRepository; private readonly IPermissionGrantRepository _grantpermissionGrantRepository;
private readonly ICurrentTenant _currentTenant;
public PermissionDataSeeder_Tests() public PermissionDataSeeder_Tests()
{ {
_permissionDataSeeder = GetRequiredService<IPermissionDataSeeder>(); _permissionDataSeeder = GetRequiredService<IPermissionDataSeeder>();
_grantpermissionGrantRepository = GetRequiredService<IPermissionGrantRepository>(); _grantpermissionGrantRepository = GetRequiredService<IPermissionGrantRepository>();
_currentTenant = GetRequiredService<ICurrentTenant>();
} }
[Fact] [Fact]
@ -32,7 +35,37 @@ namespace Volo.Abp.PermissionManagement
(await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test")).ShouldNotBeNull(); (await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test")).ShouldNotBeNull();
(await _grantpermissionGrantRepository.FindAsync("MyPermission2", "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