Ver código fonte

✨ feat(crud): 增加数据权限控制功能

- 在CrudOptions中添加dataPermission配置项
- 将dataPermission参数传递给ConcreteCrudService实例
- 在列表、创建、获取、更新和删除等所有CRUD操作中应用数据权限

♻️ refactor(role): 重命名权限检查方法

- 将checkPermission重命名为hasPermission以提高代码可读性
- 保持方法功能不变,仅修改方法名称
yourname 1 mês atrás
pai
commit
4b7ebbd32e

+ 15 - 8
packages/shared-crud/src/routes/generic-crud.routes.ts

@@ -18,7 +18,7 @@ export function createCrudRoutes<
 >(
   options: CrudOptions<T, CreateSchema, UpdateSchema, GetSchema, ListSchema>
 ) {
-  const { entity, createSchema, updateSchema, getSchema, listSchema, searchFields, relations, middleware = [], userTracking, relationFields, readOnly = false } = options;
+  const { entity, createSchema, updateSchema, getSchema, listSchema, searchFields, relations, middleware = [], userTracking, relationFields, readOnly = false, dataPermission } = options;
 
   // 创建路由实例
   const app = new OpenAPIHono<AuthContext>();
@@ -262,7 +262,8 @@ export function createCrudRoutes<
           }
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
-            relationFields: relationFields
+            relationFields: relationFields,
+            dataPermission: dataPermission
           });
 
           const [data, total] = await crudService.getList(
@@ -299,7 +300,8 @@ export function createCrudRoutes<
 
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
-            relationFields: relationFields
+            relationFields: relationFields,
+            dataPermission: dataPermission
           });
           const result = await crudService.create(data, user?.id);
           return c.json(result, 201);
@@ -326,7 +328,8 @@ export function createCrudRoutes<
 
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
-            relationFields: relationFields
+            relationFields: relationFields,
+            dataPermission: dataPermission
           });
           const result = await crudService.getById(id, relations || []);
 
@@ -355,7 +358,8 @@ export function createCrudRoutes<
 
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
-            relationFields: relationFields
+            relationFields: relationFields,
+            dataPermission: dataPermission
           });
           const result = await crudService.update(id, data, user?.id);
 
@@ -380,7 +384,8 @@ export function createCrudRoutes<
 
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
-            relationFields: relationFields
+            relationFields: relationFields,
+            dataPermission: dataPermission
           });
           const success = await crudService.delete(id);
 
@@ -428,7 +433,8 @@ export function createCrudRoutes<
           }
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
-            relationFields: relationFields
+            relationFields: relationFields,
+            dataPermission: dataPermission
           });
 
           const [data, total] = await crudService.getList(
@@ -463,7 +469,8 @@ export function createCrudRoutes<
 
           const crudService = new ConcreteCrudService(entity, {
             userTracking: userTracking,
-            relationFields: relationFields
+            relationFields: relationFields,
+            dataPermission: dataPermission
           });
           const result = await crudService.getById(id, relations || []);
 

+ 1 - 1
packages/user-module/src/services/role.service.ts

@@ -12,7 +12,7 @@ export class RoleService extends GenericCrudService<Role> {
     return this.repository.findOneBy({ name });
   }
 
-  async checkPermission(roleId: number, permission: string): Promise<boolean> {
+  async hasPermission(roleId: number, permission: string): Promise<boolean> {
     const role = await this.getById(roleId);
     if (!role) return false;
     return role.permissions.includes(permission);