refactor(系统设置): 认证设置同一种类型的认证,只能开启一个

This commit is contained in:
WangXu10 2024-01-31 14:09:29 +08:00 committed by 刘瑞斌
parent e7e546aab4
commit 858996778b
4 changed files with 29 additions and 4 deletions

View File

@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS auth_source
( (
`id` VARCHAR(50) NOT NULL COMMENT '认证源ID', `id` VARCHAR(50) NOT NULL COMMENT '认证源ID',
`configuration` BLOB NOT NULL COMMENT '认证源配置', `configuration` BLOB NOT NULL COMMENT '认证源配置',
`enable` BIT NOT NULL DEFAULT 1 COMMENT '是否启用', `enable` BIT NOT NULL DEFAULT 0 COMMENT '是否启用',
`create_time` BIGINT NOT NULL COMMENT '创建时间', `create_time` BIGINT NOT NULL COMMENT '创建时间',
`update_time` BIGINT NOT NULL COMMENT '更新时间', `update_time` BIGINT NOT NULL COMMENT '更新时间',
`description` VARCHAR(500) COMMENT '描述', `description` VARCHAR(500) COMMENT '描述',

View File

@ -2,15 +2,16 @@ package io.metersphere.system.service;
import io.metersphere.sdk.exception.MSException; import io.metersphere.sdk.exception.MSException;
import io.metersphere.system.uid.IDGenerator;
import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.Translator; import io.metersphere.sdk.util.Translator;
import io.metersphere.system.domain.AuthSource; import io.metersphere.system.domain.AuthSource;
import io.metersphere.system.domain.AuthSourceExample; import io.metersphere.system.domain.AuthSourceExample;
import io.metersphere.system.dto.AuthSourceDTO; import io.metersphere.system.dto.AuthSourceDTO;
import io.metersphere.system.mapper.AuthSourceMapper;
import io.metersphere.system.dto.request.AuthSourceRequest; import io.metersphere.system.dto.request.AuthSourceRequest;
import io.metersphere.system.mapper.AuthSourceMapper;
import io.metersphere.system.uid.IDGenerator;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -95,9 +96,20 @@ public class AuthSourceService {
} }
public AuthSource updateStatus(String id, Boolean status) { public AuthSource updateStatus(String id, Boolean status) {
if (BooleanUtils.isTrue(status)) {
AuthSource authSource = authSourceMapper.selectByPrimaryKey(id);
AuthSourceExample example = new AuthSourceExample();
example.createCriteria().andIdNotEqualTo(id).andTypeEqualTo(authSource.getType()).andEnableEqualTo(true);
List<AuthSource> authSources = authSourceMapper.selectByExample(example);
if (CollectionUtils.isNotEmpty(authSources)) {
AuthSource source = authSources.get(0);
source.setEnable(false);
authSourceMapper.updateByPrimaryKeySelective(source);
}
}
AuthSource record = new AuthSource(); AuthSource record = new AuthSource();
record.setId(id); record.setId(id);
record.setEnable(BooleanUtils.toBooleanDefaultIfNull(status,false)); record.setEnable(BooleanUtils.toBooleanDefaultIfNull(status, false));
record.setUpdateTime(System.currentTimeMillis()); record.setUpdateTime(System.currentTimeMillis());
authSourceMapper.updateByPrimaryKeySelective(record); authSourceMapper.updateByPrimaryKeySelective(record);
return record; return record;

View File

@ -25,6 +25,8 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.ldap.core.DirContextAdapter; import org.springframework.ldap.core.DirContextAdapter;
import org.springframework.ldap.core.DirContextOperations; import org.springframework.ldap.core.DirContextOperations;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.SqlConfig;
import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultMatcher; import org.springframework.test.web.servlet.ResultMatcher;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@ -114,6 +116,7 @@ public class AuthSourceControllerTests extends BaseTest {
@Test @Test
@Order(4) @Order(4)
@Sql(scripts = {"/dml/init_auth_source_test.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED))
public void testUpdateStatus() throws Exception { public void testUpdateStatus() throws Exception {
List<AuthSourceRequest> authSourceList = this.getAuthSourceList(); List<AuthSourceRequest> authSourceList = this.getAuthSourceList();
@ -123,6 +126,12 @@ public class AuthSourceControllerTests extends BaseTest {
request.setEnable(false); request.setEnable(false);
this.requestPost(AUTH_SOURCE_UPDATE_STATUS, request); this.requestPost(AUTH_SOURCE_UPDATE_STATUS, request);
requestPostPermissionTest(PermissionConstants.SYSTEM_PARAMETER_SETTING_AUTH_READ_UPDATE, AUTH_SOURCE_UPDATE_STATUS, request); requestPostPermissionTest(PermissionConstants.SYSTEM_PARAMETER_SETTING_AUTH_READ_UPDATE, AUTH_SOURCE_UPDATE_STATUS, request);
request.setEnable(true);
this.requestPost(AUTH_SOURCE_UPDATE_STATUS, request);
request.setId("wx_test_1");
request.setEnable(true);
this.requestPost(AUTH_SOURCE_UPDATE_STATUS, request);
} }

View File

@ -0,0 +1,4 @@
INSERT INTO auth_source(`id`, `configuration`, `enable`, `create_time`, `update_time`, `description`, `name`, `type`)
VALUES
('wx_test', 123412213, b'1', 1706522490360, 1706522490360, '', '测试一下吧', 'CAS'),
('wx_test_1', 123412213, b'1', 1706522490360, 1706522490360, '', '测试两下吧', 'LDAP');