-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Alan Yeh <[email protected]>
- Loading branch information
Showing
7 changed files
with
114 additions
and
77 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -31,7 +31,6 @@ | |
import central.data.authority.option.PrincipalType; | ||
import central.data.organization.AccountInput; | ||
import central.data.saas.Application; | ||
import central.data.saas.ApplicationInput; | ||
import central.provider.graphql.authority.AuthorizationProvider; | ||
import central.provider.scheduled.DataContext; | ||
import central.provider.scheduled.fetcher.DataFetcherType; | ||
|
@@ -42,22 +41,21 @@ | |
import central.studio.provider.ProviderApplication; | ||
import central.studio.provider.database.initialization.ApplicationInitializer; | ||
import central.studio.provider.database.persistence.authority.*; | ||
import central.studio.provider.database.persistence.authority.entity.*; | ||
import central.studio.provider.database.persistence.authority.entity.MenuEntity; | ||
import central.studio.provider.database.persistence.authority.entity.PermissionEntity; | ||
import central.studio.provider.database.persistence.authority.entity.RoleEntity; | ||
import central.studio.provider.database.persistence.organization.AccountPersistence; | ||
import central.studio.provider.database.persistence.saas.ApplicationPersistence; | ||
import central.studio.provider.database.persistence.saas.entity.ApplicationEntity; | ||
import central.studio.provider.database.persistence.organization.entity.AccountEntity; | ||
import central.studio.provider.database.persistence.system.DictionaryPersistence; | ||
import central.studio.provider.database.persistence.system.entity.DictionaryEntity; | ||
import central.util.Guidx; | ||
import central.util.Listx; | ||
import central.studio.provider.graphql.TestContext; | ||
import lombok.Setter; | ||
import org.junit.jupiter.api.AfterAll; | ||
import org.junit.jupiter.api.BeforeAll; | ||
import org.junit.jupiter.api.Test; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.boot.test.context.SpringBootTest; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Objects; | ||
|
||
|
@@ -77,61 +75,66 @@ public class TestAuthorizationProvider { | |
@Setter(onMethod_ = @Autowired) | ||
private AuthorizationProvider provider; | ||
|
||
@BeforeAll | ||
public static void setup(@Autowired DataContext context, @Autowired SqlExecutor executor, @Autowired ApplicationPersistence applicationPersistence) throws Exception { | ||
var application = applicationPersistence.insert(ApplicationInput.builder() | ||
.code("test") | ||
.name("测试应用") | ||
.logo("1234") | ||
.url("http://127.0.0.1:13100") | ||
.contextPath("/test") | ||
.secret(Guidx.nextID()) | ||
.enabled(Boolean.TRUE) | ||
.remark("测试应用") | ||
.routes(new ArrayList<>()) | ||
.build(), "syssa"); | ||
@Setter(onMethod_ = @Autowired) | ||
private AccountPersistence accountPersistence; | ||
|
||
@Setter(onMethod_ = @Autowired) | ||
private RolePersistence rolePersistence; | ||
|
||
@Setter(onMethod_ = @Autowired) | ||
private PermissionPersistence permissionPersistence; | ||
|
||
@Setter(onMethod_ = @Autowired) | ||
private RolePermissionPersistence rolePermissionPersistence; | ||
|
||
@Setter(onMethod_ = @Autowired) | ||
private RolePrincipalPersistence rolePrincipalPersistence; | ||
|
||
@Setter(onMethod_ = @Autowired) | ||
private RoleRangePersistence roleRangePersistence; | ||
|
||
@Setter(onMethod_ = @Autowired) | ||
private TestContext context; | ||
|
||
@BeforeAll | ||
public static void setup(@Autowired DataContext context, @Autowired SqlExecutor executor, @Autowired TestContext testContext) throws Exception { | ||
// 初始化应用 | ||
var application = testContext.getApplication(); | ||
var initializer = new ApplicationInitializer(executor); | ||
initializer.initialize("master", application); | ||
|
||
SaasContainer container = null; | ||
while (container == null || Listx.isNullOrEmpty(container.getApplications())) { | ||
while (container == null || container.getApplications().isEmpty()) { | ||
Thread.sleep(100); | ||
container = context.getData(DataFetcherType.SAAS); | ||
} | ||
} | ||
|
||
|
||
@AfterAll | ||
public static void cleanup(@Autowired ApplicationPersistence applicationPersistence, | ||
public static void cleanup(@Autowired TestContext testContext, | ||
@Autowired MenuPersistence menuPersistence, | ||
@Autowired DictionaryPersistence dictionaryPersistence, | ||
@Autowired RolePermissionPersistence rolePermissionPersistence, | ||
@Autowired RolePrincipalPersistence rolePrincipalPersistence, | ||
@Autowired RoleRangePersistence roleRangePersistence) { | ||
@Autowired RolePersistence rolePersistence, | ||
@Autowired AccountPersistence accountPersistence) { | ||
// 清理数据 | ||
var application = applicationPersistence.findFirstBy(Columns.all(), Conditions.of(ApplicationEntity.class).eq(ApplicationEntity::getCode, "test"), null); | ||
menuPersistence.deleteBy(Conditions.of(MenuEntity.class).eq(MenuEntity::getApplicationId, application.getId()), "master"); | ||
dictionaryPersistence.deleteBy(Conditions.of(DictionaryEntity.class).eq(DictionaryEntity::getApplicationId, application.getId()), "master"); | ||
rolePermissionPersistence.deleteBy(Conditions.of(RolePermissionEntity.class).eq(RolePermissionEntity::getApplicationId, application.getId()), "master"); | ||
rolePrincipalPersistence.deleteBy(Conditions.of(RolePrincipalEntity.class).eq(RolePrincipalEntity::getApplicationId, application.getId()), "master"); | ||
roleRangePersistence.deleteBy(Conditions.of(RoleRangeEntity.class).eq(RoleRangeEntity::getApplicationId, application.getId()), "master"); | ||
applicationPersistence.deleteByIds(List.of(application.getId())); | ||
} | ||
var tenant = testContext.getTenant(); | ||
var application = testContext.getApplication(); | ||
|
||
@Setter(onMethod_ = @Autowired) | ||
private ApplicationPersistence applicationPersistence; | ||
|
||
private ApplicationEntity getApplication() { | ||
return applicationPersistence.findFirstBy(Columns.all(), Conditions.of(ApplicationEntity.class).eq(ApplicationEntity::getCode, "test"), null); | ||
menuPersistence.deleteBy(Conditions.of(MenuEntity.class).eq(MenuEntity::getApplicationId, application.getId()), tenant.getCode()); | ||
dictionaryPersistence.deleteBy(Conditions.of(DictionaryEntity.class).eq(DictionaryEntity::getApplicationId, application.getId()), tenant.getCode()); | ||
rolePersistence.deleteBy(Conditions.of(RoleEntity.class).eq(RoleEntity::getApplicationId, application.getId()), tenant.getCode()); | ||
accountPersistence.deleteBy(Conditions.of(AccountEntity.class).like(AccountEntity::getUsername, "test%"), tenant.getCode()); | ||
} | ||
|
||
/** | ||
* @see AuthorizationProvider#findApplication | ||
*/ | ||
@Test | ||
public void case1() { | ||
var application = this.getApplication(); | ||
var tenant = this.context.getTenant(); | ||
var application = this.context.getApplication(); | ||
|
||
var code = application.getCode(); | ||
var secret = application.getSecret(); | ||
|
||
|
@@ -140,7 +143,7 @@ public void case1() { | |
Application result = null; | ||
Exception exception = null; | ||
try { | ||
result = provider.findApplication(code, "wrong secret"); | ||
result = provider.findApplication(code, "wrong secret", tenant.getCode()); | ||
} catch (Exception ex) { | ||
exception = ex; | ||
} | ||
|
@@ -153,7 +156,7 @@ public void case1() { | |
Application result = null; | ||
Exception exception = null; | ||
try { | ||
result = provider.findApplication(code, secret); | ||
result = provider.findApplication(code, secret, tenant.getCode()); | ||
} catch (Exception ex) { | ||
exception = ex; | ||
} | ||
|
@@ -170,8 +173,11 @@ public void case1() { | |
*/ | ||
@Test | ||
public void case2() { | ||
var tenant = this.context.getTenant(); | ||
var application = this.context.getApplication(); | ||
|
||
// syssa 有所有权限 | ||
var applications = provider.findApplications("syssa", MenuType.BACKEND.getValue(), "master"); | ||
var applications = provider.findApplications("syssa", MenuType.BACKEND.getValue(), tenant.getCode()); | ||
|
||
assertNotNull(applications); | ||
assertFalse(applications.isEmpty()); | ||
|
@@ -183,67 +189,68 @@ public void case2() { | |
* @see AuthorizationProvider#findPermissions | ||
*/ | ||
@Test | ||
public void case3(@Autowired AccountPersistence accountPersistence, | ||
@Autowired RolePersistence rolePersistence, | ||
@Autowired PermissionPersistence permissionPersistence, | ||
@Autowired RolePermissionPersistence rolePermissionPersistence, | ||
@Autowired RolePrincipalPersistence rolePrincipalPersistence) { | ||
public void case3() { | ||
var tenant = this.context.getTenant(); | ||
var application = this.context.getApplication(); | ||
|
||
// 测试准备数据 | ||
var application = this.getApplication(); | ||
var account = accountPersistence.insert(AccountInput.builder() | ||
.username("centralx") | ||
.email("[email protected]") | ||
var account = this.accountPersistence.insert(AccountInput.builder() | ||
.username("test") | ||
.email("[email protected]") | ||
.mobile("13111111111") | ||
.name("CentralX") | ||
.avatar("1234") | ||
.enabled(Boolean.TRUE) | ||
.deleted(Boolean.FALSE) | ||
.build(), "syssa", "master"); | ||
var role = rolePersistence.insert(RoleInput.builder() | ||
.build(), "syssa", tenant.getCode()); | ||
var role = this.rolePersistence.insert(RoleInput.builder() | ||
.applicationId(application.getId()) | ||
.code("10000") | ||
.name("测试角色") | ||
.unitId("") | ||
.enabled(Boolean.TRUE) | ||
.remark("测试角色") | ||
.build(), "syssa", "master"); | ||
.build(), "syssa", tenant.getCode()); | ||
|
||
var permission = permissionPersistence.findFirstBy(Columns.all(), Conditions.of(PermissionEntity.class).eq(PermissionEntity::getApplicationId, application.getId()).eq(PermissionEntity::getCode, application.getCode() + ":system:dictionary:view"), null, "master"); | ||
|
||
// 为角色分配权限 | ||
rolePermissionPersistence.insert(RolePermissionInput.builder() | ||
this.rolePermissionPersistence.insert(RolePermissionInput.builder() | ||
.applicationId(application.getId()) | ||
.roleId(role.getId()) | ||
.permissionId(permission.getId()) | ||
.build(), "syssa", "master"); | ||
.build(), "syssa", tenant.getCode()); | ||
|
||
// 为帐户分配角色 | ||
rolePrincipalPersistence.insert(RolePrincipalInput.builder() | ||
this.rolePrincipalPersistence.insert(RolePrincipalInput.builder() | ||
.applicationId(application.getId()) | ||
.roleId(role.getId()) | ||
.principalId(account.getId()) | ||
.type(PrincipalType.ACCOUNT.getValue()) | ||
.build(), "syssa", "master"); | ||
.build(), "syssa", tenant.getCode()); | ||
|
||
try { | ||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
var roles = provider.findRoles(account.getId(), application.getId(), "master"); | ||
// test findRoles | ||
var roles = provider.findRoles(account.getId(), application.getId(), tenant.getCode()); | ||
assertNotNull(roles); | ||
assertEquals(1, roles.size()); | ||
assertEquals(role.getCode(), roles.get(0).getCode()); | ||
|
||
var menus = provider.findMenus(account.getId(), MenuType.BACKEND.getValue(), application.getId(), "master"); | ||
// test findMenus | ||
var menus = provider.findMenus(account.getId(), MenuType.BACKEND.getValue(), application.getId(), tenant.getCode()); | ||
assertNotNull(menus); | ||
assertEquals(2, menus.size()); | ||
assertTrue(menus.stream().anyMatch(it -> Objects.equals(permission.getMenuId(), it.getId()))); | ||
|
||
var permissions = provider.findPermissions(account.getId(), application.getId(), "master"); | ||
// test findPermissions | ||
var permissions = provider.findPermissions(account.getId(), application.getId(), tenant.getCode()); | ||
assertNotNull(permissions); | ||
assertEquals(1, permissions.size()); | ||
assertEquals(permission.getCode(), permissions.get(0).getCode()); | ||
} finally { | ||
rolePersistence.deleteByIds(List.of(role.getId()), "master"); | ||
accountPersistence.deleteByIds(List.of(account.getId()), "master"); | ||
rolePersistence.deleteByIds(List.of(role.getId()), tenant.getCode()); | ||
accountPersistence.deleteByIds(List.of(account.getId()), tenant.getCode()); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.