diff --git a/backend/framework/domain/src/main/resources/migration/3.0.0/ddl/V3.0.0_11__system_setting.sql b/backend/framework/domain/src/main/resources/migration/3.0.0/ddl/V3.0.0_11__system_setting.sql index e6bec01e31..a96069a405 100644 --- a/backend/framework/domain/src/main/resources/migration/3.0.0/ddl/V3.0.0_11__system_setting.sql +++ b/backend/framework/domain/src/main/resources/migration/3.0.0/ddl/V3.0.0_11__system_setting.sql @@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS auth_source ( `id` VARCHAR(50) NOT NULL COMMENT '认证源ID', `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 '创建时间', `update_time` BIGINT NOT NULL COMMENT '更新时间', `description` VARCHAR(500) COMMENT '描述', diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/service/AuthSourceService.java b/backend/services/system-setting/src/main/java/io/metersphere/system/service/AuthSourceService.java index 7f53c5b166..c874d841ae 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/service/AuthSourceService.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/service/AuthSourceService.java @@ -2,15 +2,16 @@ package io.metersphere.system.service; import io.metersphere.sdk.exception.MSException; -import io.metersphere.system.uid.IDGenerator; import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.Translator; import io.metersphere.system.domain.AuthSource; import io.metersphere.system.domain.AuthSourceExample; import io.metersphere.system.dto.AuthSourceDTO; -import io.metersphere.system.mapper.AuthSourceMapper; import io.metersphere.system.dto.request.AuthSourceRequest; +import io.metersphere.system.mapper.AuthSourceMapper; +import io.metersphere.system.uid.IDGenerator; import jakarta.annotation.Resource; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -95,9 +96,20 @@ public class AuthSourceService { } 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 authSources = authSourceMapper.selectByExample(example); + if (CollectionUtils.isNotEmpty(authSources)) { + AuthSource source = authSources.get(0); + source.setEnable(false); + authSourceMapper.updateByPrimaryKeySelective(source); + } + } AuthSource record = new AuthSource(); record.setId(id); - record.setEnable(BooleanUtils.toBooleanDefaultIfNull(status,false)); + record.setEnable(BooleanUtils.toBooleanDefaultIfNull(status, false)); record.setUpdateTime(System.currentTimeMillis()); authSourceMapper.updateByPrimaryKeySelective(record); return record; diff --git a/backend/services/system-setting/src/test/java/io/metersphere/system/controller/AuthSourceControllerTests.java b/backend/services/system-setting/src/test/java/io/metersphere/system/controller/AuthSourceControllerTests.java index b72db49e2d..be4dcb069a 100644 --- a/backend/services/system-setting/src/test/java/io/metersphere/system/controller/AuthSourceControllerTests.java +++ b/backend/services/system-setting/src/test/java/io/metersphere/system/controller/AuthSourceControllerTests.java @@ -25,6 +25,8 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.ldap.core.DirContextAdapter; 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.ResultMatcher; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -114,6 +116,7 @@ public class AuthSourceControllerTests extends BaseTest { @Test @Order(4) + @Sql(scripts = {"/dml/init_auth_source_test.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void testUpdateStatus() throws Exception { List authSourceList = this.getAuthSourceList(); @@ -123,6 +126,12 @@ public class AuthSourceControllerTests extends BaseTest { request.setEnable(false); this.requestPost(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); } diff --git a/backend/services/system-setting/src/test/resources/dml/init_auth_source_test.sql b/backend/services/system-setting/src/test/resources/dml/init_auth_source_test.sql new file mode 100644 index 0000000000..7a0044bf57 --- /dev/null +++ b/backend/services/system-setting/src/test/resources/dml/init_auth_source_test.sql @@ -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');