Bladeren bron

✨ feat(crud): 添加用户ID到CRUD详情查询参数

- 在通用CRUD路由的getById方法中添加用户ID参数,支持数据权限控制
- 从请求上下文中获取用户信息并传递给crudService

🐛 fix(test): 优化数据权限测试的错误信息输出

- 添加错误响应状态判断,当请求失败时打印详细错误信息
- 帮助开发人员更快速定位数据权限测试中的问题
yourname 1 maand geleden
bovenliggende
commit
160aa72b4b

+ 4 - 2
packages/shared-crud/src/routes/generic-crud.routes.ts

@@ -327,13 +327,14 @@ export function createCrudRoutes<
       .openapi(getRouteDef, async (c: any) => {
         try {
           const { id } = c.req.valid('param');
+          const user = c.get('user');
 
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
             relationFields: relationFields,
             dataPermission: dataPermission
           });
-          const result = await crudService.getById(id, relations || []);
+          const result = await crudService.getById(id, relations || [], user?.id);
 
           if (!result) {
             return c.json({ code: 404, message: '资源不存在' }, 404);
@@ -471,13 +472,14 @@ export function createCrudRoutes<
       .openapi(getRouteDef, async (c: any) => {
         try {
           const { id } = c.req.valid('param');
+          const user = c.get('user');
 
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
             relationFields: relationFields,
             dataPermission: dataPermission
           });
-          const result = await crudService.getById(id, relations || []);
+          const result = await crudService.getById(id, relations || [], user?.id);
 
           if (!result) {
             return c.json({ code: 404, message: '资源不存在' }, 404);

+ 6 - 0
packages/shared-crud/tests/integration/data-permission.integration.test.ts

@@ -297,6 +297,12 @@ describe('共享CRUD数据权限控制集成测试', () => {
       });
 
       console.debug('获取详情响应状态:', response.status);
+
+      if (response.status !== 200) {
+        const errorData = await response.json();
+        console.debug('获取详情错误信息:', errorData);
+      }
+
       expect(response.status).toBe(200);
 
       if (response.status === 200) {