完善知识库容量权限与界面
This commit is contained in:
@@ -103,7 +103,13 @@
|
||||
</select>
|
||||
|
||||
<select id="queryTotalFileSize" resultType="java.lang.Long">
|
||||
select sum(file_size)
|
||||
select coalesce(sum(
|
||||
case
|
||||
when coalesce(file_size, 0) > 0 then file_size
|
||||
when data_type = 2 then octet_length(coalesce(file_content, ''))
|
||||
else 0
|
||||
end
|
||||
), 0)
|
||||
from knowledge_document
|
||||
where kb_id = #{kbId}
|
||||
and yn = 1
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.xspaceagi.knowledge.domain.repository.IKnowledgeConfigRepository;
|
||||
import com.xspaceagi.knowledge.domain.vectordb.VectorDBService;
|
||||
import com.xspaceagi.knowledge.man.ui.web.base.BaseController;
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.config.*;
|
||||
import com.xspaceagi.knowledge.man.ui.web.permission.KnowledgeWritePermissionChecker;
|
||||
import com.xspaceagi.system.application.dto.SpaceDto;
|
||||
import com.xspaceagi.system.application.service.SpaceApplicationService;
|
||||
import com.xspaceagi.system.application.service.SysDataPermissionApplicationService;
|
||||
@@ -71,6 +72,9 @@ public class KnowledgeConfigController extends BaseController {
|
||||
@Resource
|
||||
private SysDataPermissionApplicationService sysDataPermissionApplicationService;
|
||||
|
||||
@Resource
|
||||
private KnowledgeWritePermissionChecker knowledgeWritePermissionChecker;
|
||||
|
||||
/**
|
||||
* 知识库的列表查询接口,合并为详情的权限(需要权限)
|
||||
*
|
||||
@@ -132,6 +136,7 @@ public class KnowledgeConfigController extends BaseController {
|
||||
|
||||
var id = request.getId();
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkKnowledge(id);
|
||||
knowledgeConfigApplicationService.deleteById(id, userContext);
|
||||
return ReqResult.success();
|
||||
|
||||
@@ -151,6 +156,9 @@ public class KnowledgeConfigController extends BaseController {
|
||||
public ReqResult<KnowledgeConfigVo> detailById(@Schema(description = "知识库ID") Long id) {
|
||||
|
||||
var model = knowledgeConfigApplicationService.queryOneInfoById(id);
|
||||
if (model != null) {
|
||||
model.setFileSize(knowledgeConfigApplicationService.queryTotalFileSize(id));
|
||||
}
|
||||
var knowledgeConfigVo = KnowledgeConfigVo.convert2Dto(model);
|
||||
if (knowledgeConfigVo != null) {
|
||||
knowledgeConfigVo.setIcon(DefaultIconUrlUtil.setDefaultIconUrl(knowledgeConfigVo.getIcon(), knowledgeConfigVo.getName(), "knowledge"));
|
||||
@@ -185,6 +193,7 @@ public class KnowledgeConfigController extends BaseController {
|
||||
public ReqResult<Long> update(@RequestBody KnowledgeConfigUpdateRequest updateDto) {
|
||||
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkKnowledge(updateDto.getId());
|
||||
var model = KnowledgeConfigUpdateRequest.convert2Model(updateDto);
|
||||
var id = knowledgeConfigApplicationService.updateInfo(model, userContext);
|
||||
return ReqResult.success(id);
|
||||
@@ -239,6 +248,7 @@ public class KnowledgeConfigController extends BaseController {
|
||||
@RequestMapping(path = "/initVectorDb", method = RequestMethod.POST)
|
||||
public ReqResult<Long> add(Long id) {
|
||||
|
||||
knowledgeWritePermissionChecker.checkKnowledge(id);
|
||||
var model = this.knowledgeConfigApplicationService.queryOneInfoById(id);
|
||||
Long embeddingModelId = null;
|
||||
if (model != null) {
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.xspaceagi.knowledge.domain.repository.IKnowledgeDocumentRepository;
|
||||
import com.xspaceagi.knowledge.man.ui.web.base.BaseController;
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.config.KnowledgeConfigDeleteRequest;
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.document.*;
|
||||
import com.xspaceagi.knowledge.man.ui.web.permission.KnowledgeWritePermissionChecker;
|
||||
import com.xspaceagi.system.application.dto.SpaceDto;
|
||||
import com.xspaceagi.system.application.dto.UserDto;
|
||||
import com.xspaceagi.system.application.service.SpaceApplicationService;
|
||||
@@ -78,6 +79,9 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
@Resource
|
||||
private IKnowledgeConfigApplicationService knowledgeConfigApplicationService;
|
||||
|
||||
@Resource
|
||||
private KnowledgeWritePermissionChecker knowledgeWritePermissionChecker;
|
||||
|
||||
@RequireResource(COMPONENT_LIB_QUERY_DETAIL)
|
||||
@OperationLogReporter(actionType = ActionType.QUERY, action = "数据列表查询", objectName = "知识库文档", systemCode = SystemEnum.KNOWLEDGE_CONFIG)
|
||||
@LogPrint(step = "知识库[知识库文档]-数据列表查询")
|
||||
@@ -161,6 +165,7 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
var id = request.getId();
|
||||
|
||||
var userContext = getUser();
|
||||
knowledgeWritePermissionChecker.checkDocument(id);
|
||||
knowledgeDocumentApplicationService.deleteById(id, userContext);
|
||||
return ReqResult.success();
|
||||
|
||||
@@ -200,6 +205,7 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
}
|
||||
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkDocument(updateDto.getDocId());
|
||||
|
||||
var model = KnowledgeDocumentUpdateRequest.convert2Model(updateDto);
|
||||
|
||||
@@ -218,6 +224,7 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
|
||||
var userContext = this.getUser();
|
||||
var docId = updateDto.getDocId();
|
||||
knowledgeWritePermissionChecker.checkDocument(docId);
|
||||
var name = updateDto.getName();
|
||||
var id = knowledgeDocumentApplicationService.updateDocName(docId, name, userContext);
|
||||
return ReqResult.success(id);
|
||||
@@ -236,6 +243,7 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
}
|
||||
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkKnowledge(addDto.getKbId());
|
||||
|
||||
//新增权限内容
|
||||
//知识库大小验证
|
||||
@@ -291,6 +299,7 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
}
|
||||
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkKnowledge(addDto.getKbId());
|
||||
var model = KnowledgeDocumentCustomAddRequest.convert2ModelForCustom(addDto);
|
||||
|
||||
var ids = knowledgeDocumentApplicationService.customAddInfo(model, userContext);
|
||||
@@ -306,6 +315,7 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
public ReqResult<Void> generateQAs(@PathVariable Long docId) {
|
||||
var userContext = this.getUser();
|
||||
|
||||
knowledgeWritePermissionChecker.checkDocument(docId);
|
||||
knowledgeDocumentApplicationService.generateForQa(docId, userContext);
|
||||
return ReqResult.success();
|
||||
}
|
||||
@@ -318,6 +328,7 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
public ReqResult<Void> generateEmbeddings(@PathVariable Long docId) {
|
||||
var userContext = this.getUser();
|
||||
|
||||
knowledgeWritePermissionChecker.checkDocument(docId);
|
||||
knowledgeDocumentApplicationService.generateEmbeddings(docId, userContext);
|
||||
return ReqResult.success();
|
||||
}
|
||||
@@ -340,6 +351,7 @@ public class KnowledgeDocumentController extends BaseController {
|
||||
public ReqResult<Void> autoRetryTaskByDocId(@PathVariable Long docId) {
|
||||
var userContext = this.getUser();
|
||||
var userId = userContext.getUserId();
|
||||
knowledgeWritePermissionChecker.checkDocument(docId);
|
||||
|
||||
UserDto userDto = (UserDto) RequestContext.get().getUser();
|
||||
TenantRunnable tenantRunnable = new TenantRunnable(() -> {
|
||||
|
||||
@@ -33,6 +33,7 @@ import com.xspaceagi.knowledge.man.ui.web.dto.qa.KnowledgeQaSegmentAddRequest;
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.qa.KnowledgeQaSegmentQueryRequest;
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.qa.KnowledgeQaSegmentUpdateRequest;
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.qa.KnowledgeQaSegmentVo;
|
||||
import com.xspaceagi.knowledge.man.ui.web.permission.KnowledgeWritePermissionChecker;
|
||||
import com.xspaceagi.system.sdk.operate.ActionType;
|
||||
import com.xspaceagi.system.sdk.operate.OperationLogReporter;
|
||||
import com.xspaceagi.system.sdk.operate.SystemEnum;
|
||||
@@ -68,6 +69,9 @@ public class KnowledgeQaController extends BaseController {
|
||||
@Resource
|
||||
private SpaceApplicationService spaceApplicationService;
|
||||
|
||||
@Resource
|
||||
private KnowledgeWritePermissionChecker knowledgeWritePermissionChecker;
|
||||
|
||||
@RequireResource(COMPONENT_LIB_QUERY_DETAIL)
|
||||
@OperationLogReporter(actionType = ActionType.QUERY, action = "数据列表查询", objectName = "知识库问答", systemCode = SystemEnum.KNOWLEDGE_CONFIG)
|
||||
@LogPrint(step = "知识库[知识库问答]-数据列表查询")
|
||||
@@ -114,6 +118,7 @@ public class KnowledgeQaController extends BaseController {
|
||||
throws IntrospectionException, InvocationTargetException, IllegalAccessException {
|
||||
|
||||
var id = request.getId();
|
||||
knowledgeWritePermissionChecker.checkQa(id);
|
||||
knowledgeQaSegmentApplicationService.deleteById(id);
|
||||
return ReqResult.success();
|
||||
|
||||
@@ -141,6 +146,7 @@ public class KnowledgeQaController extends BaseController {
|
||||
public ReqResult<Long> update(@RequestBody KnowledgeQaSegmentUpdateRequest updateDto)
|
||||
throws IntrospectionException, InvocationTargetException, IllegalAccessException {
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkQa(updateDto.getId());
|
||||
var model = KnowledgeQaSegmentUpdateRequest.convert2Model(updateDto);
|
||||
var id = knowledgeQaSegmentApplicationService.updateInfo(model, userContext);
|
||||
return ReqResult.success(id);
|
||||
@@ -156,6 +162,7 @@ public class KnowledgeQaController extends BaseController {
|
||||
throws IntrospectionException, InvocationTargetException, IllegalAccessException {
|
||||
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkKnowledge(addDto.getKbId());
|
||||
var model = KnowledgeQaSegmentAddRequest.convert2Model(addDto);
|
||||
var id = knowledgeQaSegmentApplicationService.addInfo(model, userContext);
|
||||
return ReqResult.success(id);
|
||||
@@ -195,6 +202,7 @@ public class KnowledgeQaController extends BaseController {
|
||||
@RequestParam("kbId") Long kbId) {
|
||||
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkKnowledge(kbId);
|
||||
|
||||
knowledgeQaSegmentApplicationService.importQaFromExcel(kbId, file, userContext);
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.xspaceagi.knowledge.man.ui.web.dto.segment.KnowledgeRawSegmentAddRequ
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.segment.KnowledgeRawSegmentQueryRequest;
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.segment.KnowledgeRawSegmentUpdateRequest;
|
||||
import com.xspaceagi.knowledge.man.ui.web.dto.segment.KnowledgeRawSegmentVo;
|
||||
import com.xspaceagi.knowledge.man.ui.web.permission.KnowledgeWritePermissionChecker;
|
||||
import com.xspaceagi.system.application.dto.SpaceDto;
|
||||
import com.xspaceagi.system.application.service.SpaceApplicationService;
|
||||
import com.xspaceagi.system.domain.log.LogPrint;
|
||||
@@ -56,6 +57,9 @@ public class KnowledgeRawSegmentController extends BaseController {
|
||||
@Resource
|
||||
private SpaceApplicationService spaceApplicationService;
|
||||
|
||||
@Resource
|
||||
private KnowledgeWritePermissionChecker knowledgeWritePermissionChecker;
|
||||
|
||||
@RequireResource(COMPONENT_LIB_QUERY_DETAIL)
|
||||
@OperationLogReporter(actionType = ActionType.QUERY, action = "数据列表查询", objectName = "知识库分段", systemCode = SystemEnum.KNOWLEDGE_CONFIG)
|
||||
@LogPrint(step = "知识库[知识库分段]-数据列表查询")
|
||||
@@ -104,6 +108,7 @@ public class KnowledgeRawSegmentController extends BaseController {
|
||||
|
||||
var id = request.getId();
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkRawSegment(id);
|
||||
knowledgeRawSegmentApplicationService.deleteById(id, userContext);
|
||||
return ReqResult.success();
|
||||
|
||||
@@ -132,6 +137,7 @@ public class KnowledgeRawSegmentController extends BaseController {
|
||||
throws IntrospectionException, InvocationTargetException, IllegalAccessException {
|
||||
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkRawSegment(updateDto.getRawSegmentId());
|
||||
var model = KnowledgeRawSegmentUpdateRequest.convert2Model(updateDto);
|
||||
var id = knowledgeRawSegmentApplicationService.updateInfo(model, userContext);
|
||||
return ReqResult.success(id);
|
||||
@@ -147,6 +153,7 @@ public class KnowledgeRawSegmentController extends BaseController {
|
||||
throws IntrospectionException, InvocationTargetException, IllegalAccessException {
|
||||
|
||||
var userContext = this.getUser();
|
||||
knowledgeWritePermissionChecker.checkDocument(addDto.getDocId());
|
||||
var model = KnowledgeRawSegmentAddRequest.convert2Model(addDto);
|
||||
|
||||
var id = knowledgeRawSegmentApplicationService.addInfo(model, userContext);
|
||||
|
||||
@@ -9,6 +9,7 @@ import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Objects;
|
||||
|
||||
@Schema(description = "知识库文档-手动自定义新增")
|
||||
@@ -51,6 +52,9 @@ public class KnowledgeDocumentCustomAddRequest implements Serializable {
|
||||
knowledgeDocumentModel.setName(addDto.getName());
|
||||
//dataType = 2,自定义文本,才生效
|
||||
knowledgeDocumentModel.setFileContent(addDto.getFileContent());
|
||||
knowledgeDocumentModel.setFileSize(addDto.getFileContent() == null
|
||||
? 0L
|
||||
: (long) addDto.getFileContent().getBytes(StandardCharsets.UTF_8).length);
|
||||
//docUrl 给个空字符串,满足数据库非空要求
|
||||
knowledgeDocumentModel.setDocUrl("");
|
||||
knowledgeDocumentModel.setPubStatus(KnowledgePubStatusEnum.Waiting);
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.xspaceagi.knowledge.man.ui.web.permission;
|
||||
|
||||
import com.xspaceagi.knowledge.core.application.service.IKnowledgeConfigApplicationService;
|
||||
import com.xspaceagi.knowledge.core.application.service.IKnowledgeDocumentApplicationService;
|
||||
import com.xspaceagi.knowledge.core.application.service.IKnowledgeQaSegmentApplicationService;
|
||||
import com.xspaceagi.knowledge.core.application.service.IKnowledgeRawSegmentApplicationService;
|
||||
import com.xspaceagi.knowledge.domain.model.KnowledgeConfigModel;
|
||||
import com.xspaceagi.system.spec.common.RequestContext;
|
||||
import com.xspaceagi.system.spec.enums.ErrorCodeEnum;
|
||||
import com.xspaceagi.system.spec.exception.BizException;
|
||||
import com.xspaceagi.system.spec.exception.BizExceptionCodeEnum;
|
||||
import com.xspaceagi.system.spec.exception.KnowledgeException;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Component
|
||||
public class KnowledgeWritePermissionChecker {
|
||||
|
||||
@Resource
|
||||
private IKnowledgeConfigApplicationService knowledgeConfigApplicationService;
|
||||
|
||||
@Resource
|
||||
private IKnowledgeDocumentApplicationService knowledgeDocumentApplicationService;
|
||||
|
||||
@Resource
|
||||
private IKnowledgeRawSegmentApplicationService knowledgeRawSegmentApplicationService;
|
||||
|
||||
@Resource
|
||||
private IKnowledgeQaSegmentApplicationService knowledgeQaSegmentApplicationService;
|
||||
|
||||
public void checkKnowledge(Long knowledgeId) {
|
||||
KnowledgeConfigModel knowledge = knowledgeConfigApplicationService.queryOneInfoById(knowledgeId);
|
||||
if (knowledge == null) {
|
||||
throw KnowledgeException.build(BizExceptionCodeEnum.resourceDataNotFound);
|
||||
}
|
||||
RequestContext<?> requestContext = RequestContext.get();
|
||||
Long currentUserId = requestContext == null ? null : requestContext.getUserId();
|
||||
if (knowledge.getCreatorId() == null
|
||||
|| currentUserId == null
|
||||
|| !Objects.equals(knowledge.getCreatorId(), currentUserId)) {
|
||||
throw BizException.of(ErrorCodeEnum.PERMISSION_DENIED, BizExceptionCodeEnum.permissionDenied);
|
||||
}
|
||||
}
|
||||
|
||||
public void checkDocument(Long documentId) {
|
||||
var document = knowledgeDocumentApplicationService.queryOneInfoById(documentId);
|
||||
if (document == null) {
|
||||
throw KnowledgeException.build(BizExceptionCodeEnum.resourceDataNotFound);
|
||||
}
|
||||
checkKnowledge(document.getKbId());
|
||||
}
|
||||
|
||||
public void checkRawSegment(Long rawSegmentId) {
|
||||
var segment = knowledgeRawSegmentApplicationService.queryOneInfoById(rawSegmentId);
|
||||
if (segment == null) {
|
||||
throw KnowledgeException.build(BizExceptionCodeEnum.resourceDataNotFound);
|
||||
}
|
||||
checkKnowledge(segment.getKbId());
|
||||
}
|
||||
|
||||
public void checkQa(Long qaId) {
|
||||
var qa = knowledgeQaSegmentApplicationService.queryOneInfoById(qaId);
|
||||
if (qa == null) {
|
||||
throw KnowledgeException.build(BizExceptionCodeEnum.resourceDataNotFound);
|
||||
}
|
||||
checkKnowledge(qa.getKbId());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.xspaceagi.knowledge.man.ui.web.dto.document;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class KnowledgeDocumentCustomAddRequestTest {
|
||||
|
||||
@Test
|
||||
void calculatesUtf8ByteSizeForCustomText() {
|
||||
KnowledgeDocumentCustomAddRequest request = new KnowledgeDocumentCustomAddRequest();
|
||||
request.setKbId(1L);
|
||||
request.setName("测试文档");
|
||||
request.setFileContent("知识库 text");
|
||||
|
||||
var model = KnowledgeDocumentCustomAddRequest.convert2ModelForCustom(request);
|
||||
|
||||
assertThat(model.getFileSize())
|
||||
.isEqualTo((long) request.getFileContent().getBytes(StandardCharsets.UTF_8).length);
|
||||
}
|
||||
|
||||
@Test
|
||||
void usesZeroSizeWhenCustomTextIsEmpty() {
|
||||
KnowledgeDocumentCustomAddRequest request = new KnowledgeDocumentCustomAddRequest();
|
||||
request.setKbId(1L);
|
||||
request.setName("空文档");
|
||||
|
||||
var model = KnowledgeDocumentCustomAddRequest.convert2ModelForCustom(request);
|
||||
|
||||
assertThat(model.getFileSize()).isZero();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package com.xspaceagi.knowledge.man.ui.web.permission;
|
||||
|
||||
import com.xspaceagi.knowledge.core.application.service.IKnowledgeConfigApplicationService;
|
||||
import com.xspaceagi.knowledge.core.application.service.IKnowledgeDocumentApplicationService;
|
||||
import com.xspaceagi.knowledge.core.application.service.IKnowledgeQaSegmentApplicationService;
|
||||
import com.xspaceagi.knowledge.core.application.service.IKnowledgeRawSegmentApplicationService;
|
||||
import com.xspaceagi.knowledge.domain.model.KnowledgeConfigModel;
|
||||
import com.xspaceagi.knowledge.domain.model.KnowledgeDocumentModel;
|
||||
import com.xspaceagi.knowledge.domain.model.KnowledgeQaSegmentModel;
|
||||
import com.xspaceagi.knowledge.domain.model.KnowledgeRawSegmentModel;
|
||||
import com.xspaceagi.system.spec.common.RequestContext;
|
||||
import com.xspaceagi.system.spec.exception.BizException;
|
||||
import com.xspaceagi.system.spec.exception.KnowledgeException;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class KnowledgeWritePermissionCheckerTest {
|
||||
|
||||
private static final Long CURRENT_USER_ID = 10L;
|
||||
private static final Long KNOWLEDGE_ID = 20L;
|
||||
|
||||
@Mock
|
||||
private IKnowledgeConfigApplicationService knowledgeConfigApplicationService;
|
||||
|
||||
@Mock
|
||||
private IKnowledgeDocumentApplicationService knowledgeDocumentApplicationService;
|
||||
|
||||
@Mock
|
||||
private IKnowledgeRawSegmentApplicationService knowledgeRawSegmentApplicationService;
|
||||
|
||||
@Mock
|
||||
private IKnowledgeQaSegmentApplicationService knowledgeQaSegmentApplicationService;
|
||||
|
||||
@InjectMocks
|
||||
private KnowledgeWritePermissionChecker permissionChecker;
|
||||
|
||||
@BeforeEach
|
||||
void setUpRequestContext() {
|
||||
RequestContext<Object> requestContext = new RequestContext<>();
|
||||
requestContext.setUserId(CURRENT_USER_ID);
|
||||
RequestContext.set(requestContext);
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void clearRequestContext() {
|
||||
RequestContext.remove();
|
||||
}
|
||||
|
||||
@Test
|
||||
void allowsKnowledgeCreatorToWrite() {
|
||||
when(knowledgeConfigApplicationService.queryOneInfoById(KNOWLEDGE_ID))
|
||||
.thenReturn(knowledge(CURRENT_USER_ID));
|
||||
|
||||
assertDoesNotThrow(() -> permissionChecker.checkKnowledge(KNOWLEDGE_ID));
|
||||
}
|
||||
|
||||
@Test
|
||||
void deniesOtherUsersEvenWhenKnowledgeIsAccessible() {
|
||||
when(knowledgeConfigApplicationService.queryOneInfoById(KNOWLEDGE_ID))
|
||||
.thenReturn(knowledge(99L));
|
||||
|
||||
assertThrows(BizException.class, () -> permissionChecker.checkKnowledge(KNOWLEDGE_ID));
|
||||
}
|
||||
|
||||
@Test
|
||||
void deniesWriteWhenOwnershipCannotBeConfirmed() {
|
||||
when(knowledgeConfigApplicationService.queryOneInfoById(KNOWLEDGE_ID))
|
||||
.thenReturn(knowledge(null));
|
||||
|
||||
assertThrows(BizException.class, () -> permissionChecker.checkKnowledge(KNOWLEDGE_ID));
|
||||
}
|
||||
|
||||
@Test
|
||||
void rejectsMissingKnowledge() {
|
||||
when(knowledgeConfigApplicationService.queryOneInfoById(KNOWLEDGE_ID)).thenReturn(null);
|
||||
|
||||
assertThrows(KnowledgeException.class, () -> permissionChecker.checkKnowledge(KNOWLEDGE_ID));
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolvesDocumentSegmentAndQaToOwningKnowledge() {
|
||||
KnowledgeDocumentModel document = new KnowledgeDocumentModel();
|
||||
document.setKbId(KNOWLEDGE_ID);
|
||||
KnowledgeRawSegmentModel segment = new KnowledgeRawSegmentModel();
|
||||
segment.setKbId(KNOWLEDGE_ID);
|
||||
KnowledgeQaSegmentModel qa = new KnowledgeQaSegmentModel();
|
||||
qa.setKbId(KNOWLEDGE_ID);
|
||||
|
||||
when(knowledgeDocumentApplicationService.queryOneInfoById(1L)).thenReturn(document);
|
||||
when(knowledgeRawSegmentApplicationService.queryOneInfoById(2L)).thenReturn(segment);
|
||||
when(knowledgeQaSegmentApplicationService.queryOneInfoById(3L)).thenReturn(qa);
|
||||
when(knowledgeConfigApplicationService.queryOneInfoById(KNOWLEDGE_ID))
|
||||
.thenReturn(knowledge(CURRENT_USER_ID));
|
||||
|
||||
assertDoesNotThrow(() -> permissionChecker.checkDocument(1L));
|
||||
assertDoesNotThrow(() -> permissionChecker.checkRawSegment(2L));
|
||||
assertDoesNotThrow(() -> permissionChecker.checkQa(3L));
|
||||
}
|
||||
|
||||
private KnowledgeConfigModel knowledge(Long creatorId) {
|
||||
KnowledgeConfigModel knowledge = new KnowledgeConfigModel();
|
||||
knowledge.setId(KNOWLEDGE_ID);
|
||||
knowledge.setCreatorId(creatorId);
|
||||
return knowledge;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user