From 8459227f42c3f6006608b0843b74061146be0ca9 Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Tue, 4 Feb 2025 00:46:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=8C=E6=8E=A7=E5=88=B6=E4=B8=8E=E5=88=97?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E9=A1=B5=E9=9D=A2=E5=8A=9F=E8=83=BD=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/metasecurity_controller.py | 178 +++++++ .../module_admin/dao/metaSecurity_dao.py | 136 +++++ .../module_admin/entity/do/metasecurity_do.py | 54 ++ .../module_admin/entity/vo/metasecurity_vo.py | 79 +++ .../service/metasecurity_service.py | 270 ++++++++++ vue-fastapi-backend/server.py | 2 + .../src/api/meta/metasercurity.js | 108 ++++ .../meta/metasercurity/MetaSecurityCol.vue | 485 +++++++++++++++++ .../meta/metasercurity/MetaSecurityRow.vue | 489 ++++++++++++++++++ .../src/views/meta/metatask/index.vue | 4 +- 10 files changed, 1802 insertions(+), 3 deletions(-) create mode 100644 vue-fastapi-backend/module_admin/controller/metasecurity_controller.py create mode 100644 vue-fastapi-backend/module_admin/dao/metaSecurity_dao.py create mode 100644 vue-fastapi-backend/module_admin/entity/do/metasecurity_do.py create mode 100644 vue-fastapi-backend/module_admin/entity/vo/metasecurity_vo.py create mode 100644 vue-fastapi-backend/module_admin/service/metasecurity_service.py create mode 100644 vue-fastapi-frontend/src/api/meta/metasercurity.js create mode 100644 vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue create mode 100644 vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue diff --git a/vue-fastapi-backend/module_admin/controller/metasecurity_controller.py b/vue-fastapi-backend/module_admin/controller/metasecurity_controller.py new file mode 100644 index 0000000..b8067bc --- /dev/null +++ b/vue-fastapi-backend/module_admin/controller/metasecurity_controller.py @@ -0,0 +1,178 @@ +from datetime import datetime +from fastapi import APIRouter, Depends, Request +from pydantic_validation_decorator import ValidateFields +from sqlalchemy.ext.asyncio import AsyncSession +from config.enums import BusinessType +from config.get_db import get_db +from module_admin.entity.vo.user_vo import CurrentUserModel +from module_admin.annotation.log_annotation import Log +from module_admin.aspect.interface_auth import CheckUserInterfaceAuth +from module_admin.entity.vo.metasecurity_vo import MetaSecurityColModel, MetaSecurityRowModel, MetaSecurityColPageQueryModel, MetaSecurityRowPageQueryModel, DeleteMetaSecurityModel +from module_admin.service.metasecurity_service import MetaSecurityService +from module_admin.service.login_service import LoginService +from utils.common_util import bytes2file_response +from utils.log_util import logger +from utils.page_util import PageResponseModel +from utils.response_util import ResponseUtil +import uuid + +metaSecurityController = APIRouter(prefix='/meta/metaSecurity', dependencies=[Depends(LoginService.get_current_user)]) + + +# MetaSecurity Column相关API +@metaSecurityController.get( + '/col/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:list'))] +) +async def get_meta_security_col_list( + request: Request, + col_page_query: MetaSecurityColPageQueryModel = Depends(MetaSecurityColPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), +): + col_page_query_result = await MetaSecurityService.get_meta_security_col_list_services(query_db, col_page_query, is_page=True) + logger.info('获取列配置列表成功') + return ResponseUtil.success(model_content=col_page_query_result) +@metaSecurityController.get('/row/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:list'))] +) +async def get_meta_security_row_list( + request: Request, + row_page_query: MetaSecurityRowPageQueryModel = Depends(MetaSecurityRowPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), +): + row_page_query_result = await MetaSecurityService.get_meta_security_row_list_services(query_db, row_page_query, is_page=True) + logger.info('获取行配置列表成功') + return ResponseUtil.success(model_content=row_page_query_result) +@metaSecurityController.get( + '/row/{row_id}', response_model=MetaSecurityRowModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:query'))] +) +async def query_detail_row(request: Request, row_id: str, query_db: AsyncSession = Depends(get_db)): + config_detail_result = await MetaSecurityService.row_detail_services(query_db, row_id) + logger.info(f'获取config_id为{row_id}的信息成功') + + return ResponseUtil.success(data=config_detail_result) +@metaSecurityController.get( + '/col/{col_id}', response_model=MetaSecurityColModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:query'))] +) +async def query_detail_col(request: Request, col_id: str, query_db: AsyncSession = Depends(get_db)): + config_detail_result = await MetaSecurityService.col_detail_services(query_db, col_id) + logger.info(f'获取config_id为{col_id}的信息成功') + + return ResponseUtil.success(data=config_detail_result) +@metaSecurityController.post('/col', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:add'))]) +@ValidateFields(validate_model='add_meta_security_col') +@Log(title='列配置管理', business_type=BusinessType.INSERT) +async def add_meta_security_col( + request: Request, + add_meta_security_col: MetaSecurityColModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), +): + + add_meta_security_col.create_by = current_user.user.user_name + add_meta_security_col.create_time = datetime.now() + add_meta_security_col.update_by = current_user.user.user_name + add_meta_security_col.update_time = datetime.now() + add_meta_security_col_result = await MetaSecurityService.add_meta_security_col_services(request, query_db, add_meta_security_col) + logger.info(add_meta_security_col_result.message) + return ResponseUtil.success(msg=add_meta_security_col_result.message) + + +@metaSecurityController.put('/col', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:edit'))]) +@ValidateFields(validate_model='edit_meta_security_col') +@Log(title='列配置管理', business_type=BusinessType.UPDATE) +async def edit_meta_security_col( + request: Request, + edit_meta_security_col: MetaSecurityColModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), +): + edit_meta_security_col.update_by = current_user.user.user_name + edit_meta_security_col.update_time = datetime.now() + edit_meta_security_col_result = await MetaSecurityService.edit_meta_security_col_services(request, query_db, edit_meta_security_col) + logger.info(edit_meta_security_col_result.message) + return ResponseUtil.success(msg=edit_meta_security_col_result.message) + + +@metaSecurityController.delete('/col/{col_ids}', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:remove'))]) +@Log(title='列配置管理', business_type=BusinessType.DELETE) +async def delete_meta_security_col( + request: Request, + col_ids: str, + query_db: AsyncSession = Depends(get_db), +): + delete_meta_security_col = DeleteMetaSecurityModel(metasecurityIds =col_ids) + delete_meta_security_col_result = await MetaSecurityService.delete_meta_security_col_services(request, query_db, delete_meta_security_col) + logger.info(delete_meta_security_col_result.message) + return ResponseUtil.success(msg=delete_meta_security_col_result.message) + + +# @metaSecurityController.get('/col/{col_id}', response_model=MetaSecurityColModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:query'))]) +# async def query_meta_security_col_detail( +# request: Request, +# col_id: str, +# query_db: AsyncSession = Depends(get_db), +# ): +# col_detail_result = await MetaSecurityService.get_meta_security_col_by_id_services(query_db, col_id) +# logger.info(f'获取col_id为{col_id}的列配置信息成功') +# return ResponseUtil.success(data=col_detail_result) + + +# MetaSecurity Row相关API + + + +@metaSecurityController.post('/row', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:add'))]) +@ValidateFields(validate_model='add_meta_security_row') +@Log(title='行配置管理', business_type=BusinessType.INSERT) +async def add_meta_security_row( + request: Request, + add_meta_security_row: MetaSecurityRowModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), +): + add_meta_security_row.create_by = current_user.user.user_name + add_meta_security_row.create_time = datetime.now() + add_meta_security_row.update_by = current_user.user.user_name + add_meta_security_row.update_time = datetime.now() + add_meta_security_row_result = await MetaSecurityService.add_meta_security_row_services(request, query_db, add_meta_security_row) + logger.info(add_meta_security_row_result.message) + return ResponseUtil.success(msg=add_meta_security_row_result.message) + + +@metaSecurityController.put('/row', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:edit'))]) +@ValidateFields(validate_model='edit_meta_security_row') +@Log(title='行配置管理', business_type=BusinessType.UPDATE) +async def edit_meta_security_row( + request: Request, + edit_meta_security_row: MetaSecurityRowModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), +): + edit_meta_security_row.update_by = current_user.user.user_name + edit_meta_security_row.update_time = datetime.now() + edit_meta_security_row_result = await MetaSecurityService.edit_meta_security_row_services(request, query_db, edit_meta_security_row) + logger.info(edit_meta_security_row_result.message) + return ResponseUtil.success(msg=edit_meta_security_row_result.message) + + +@metaSecurityController.delete('/row/{row_ids}', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:remove'))]) +@Log(title='行配置管理', business_type=BusinessType.DELETE) +async def delete_meta_security_row( + request: Request, + row_ids: str, + query_db: AsyncSession = Depends(get_db), +): + delete_meta_security_row = DeleteMetaSecurityModel(metasecurityIds=row_ids) + delete_meta_security_row_result = await MetaSecurityService.delete_meta_security_row_services(request, query_db, delete_meta_security_row) + logger.info(delete_meta_security_row_result.message) + return ResponseUtil.success(msg=delete_meta_security_row_result.message) + + +@metaSecurityController.get('/row/{row_id}', response_model=MetaSecurityRowModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:query'))]) +async def query_meta_security_row_detail( + request: Request, + row_id: int, + query_db: AsyncSession = Depends(get_db), +): + row_detail_result = await MetaSecurityService.get_meta_security_row_by_id_services(query_db, row_id) + logger.info(f'获取row_id为{row_id}的行配置信息成功') + return ResponseUtil.success(data=row_detail_result) diff --git a/vue-fastapi-backend/module_admin/dao/metaSecurity_dao.py b/vue-fastapi-backend/module_admin/dao/metaSecurity_dao.py new file mode 100644 index 0000000..e99100e --- /dev/null +++ b/vue-fastapi-backend/module_admin/dao/metaSecurity_dao.py @@ -0,0 +1,136 @@ +from sqlalchemy import delete, select, update, desc +from sqlalchemy.ext.asyncio import AsyncSession +from module_admin.entity.do.metasecurity_do import MetaSecurityCol, MetaSecurityRow +from module_admin.entity.vo.metasecurity_vo import MetaSecurityColModel, MetaSecurityRowModel +from utils.page_util import PageUtil + + +class MetaSecurityDao: + """ + 数据源安全管理模块数据库操作层 + """ + + @classmethod + async def get_meta_security_col_list(cls, db: AsyncSession, query_object: MetaSecurityColModel, is_page: bool = False): + """ + 获取 MetaSecurityCol 的列表信息,支持模糊查询和分页 + :param db: ORM对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 列表信息 + """ + # 构建查询条件 + filters = [] + if query_object.dbCName: + filters.append(MetaSecurityCol.dbCName.like(f"%{query_object.dbCName}%")) + if query_object.obj_value: + filters.append(MetaSecurityCol.obj_value.like(f"%{query_object.obj_value}%")) + if query_object.dbTName: + filters.append(MetaSecurityCol.dbTName.like(f"%{query_object.dbTName}%")) + if query_object.dbSName: + filters.append(MetaSecurityCol.dbSName.like(f"%{query_object.dbSName}%")) + if query_object.dbRID: + filters.append(MetaSecurityCol.dbRID==query_object.dbRID) + # 构建查询语句 + query = ( + select(MetaSecurityCol) + .where(*filters) + .order_by(desc(MetaSecurityCol.create_time)) # 按创建时间降序排序 + ) + + # 分页处理 + col_list = await PageUtil.paginate( + db, query, query_object.page_num, query_object.page_size, is_page + ) + return col_list + + + + @classmethod + async def get_meta_security_row_list(cls, db: AsyncSession, query_object: MetaSecurityRowModel, is_page: bool = False): + """ + 获取 MetaSecurityRow 的列表信息,支持模糊查询和分页 + :param db: ORM对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 列表信息 + """ + # 构建查询条件 + filters = [] + if query_object.dbCName: + filters.append(MetaSecurityRow.dbCName.like(f"%{query_object.dbCName}%")) + if query_object.obj_value: + filters.append(MetaSecurityRow.obj_value.like(f"%{query_object.obj_value}%")) + if query_object.dbTName: + filters.append(MetaSecurityRow.dbTName.like(f"%{query_object.dbTName}%")) + if query_object.dbSName: + filters.append(MetaSecurityRow.dbSName.like(f"%{query_object.dbSName}%")) + if query_object.dbRID: + filters.append(MetaSecurityRow.dbRID==query_object.dbRID) + # 构建查询语句 + query = ( + select(MetaSecurityRow) + .where(*filters) + .order_by(desc(MetaSecurityRow.create_time)) # 按创建时间降序排序 + ) + + # 分页处理 + row_list = await PageUtil.paginate( + db, query, query_object.page_num, query_object.page_size, is_page + ) + return row_list + + + @classmethod + async def get_meta_security_col_by_id(cls, db: AsyncSession, colId: str): + col = ( + await db.execute( + select(MetaSecurityCol) + .where(MetaSecurityCol.colId == colId) + ) + ).scalars().first() + return col + + @classmethod + async def get_meta_security_row_by_id(cls, db: AsyncSession, rowId: str): + row = ( + await db.execute( + select(MetaSecurityRow) + .where(MetaSecurityRow.rowId == rowId) + ) + ).scalars().first() + return row + + @classmethod + async def add_meta_security_col(cls, db: AsyncSession,colModel:MetaSecurityColModel): + col = MetaSecurityCol( + **colModel.model_dump() + ) + db.add(col) + await db.flush() + return col + @classmethod + async def add_meta_security_row(cls, db: AsyncSession,rowModel:MetaSecurityRowModel): + row = MetaSecurityRow(**rowModel.model_dump()) + db.add(row) + await db.flush() + return row + + @classmethod + async def delete_meta_security_col(cls, db: AsyncSession, colId: str): + await db.execute(delete(MetaSecurityCol).where(MetaSecurityCol.colId == colId)) + + @classmethod + async def delete_meta_security_row(cls, db: AsyncSession, rowId: str): + await db.execute(delete(MetaSecurityRow).where(MetaSecurityRow.rowId == rowId)) + + @classmethod + async def update_meta_security_col(cls, db: AsyncSession, update_data: MetaSecurityColModel): + + await db.execute(update(MetaSecurityCol), [update_data]) + await db.flush() + + @classmethod + async def update_meta_security_row(cls, db: AsyncSession, update_data: MetaSecurityRowModel): + await db.execute(update(MetaSecurityRow), [update_data]) + await db.flush() diff --git a/vue-fastapi-backend/module_admin/entity/do/metasecurity_do.py b/vue-fastapi-backend/module_admin/entity/do/metasecurity_do.py new file mode 100644 index 0000000..d412604 --- /dev/null +++ b/vue-fastapi-backend/module_admin/entity/do/metasecurity_do.py @@ -0,0 +1,54 @@ +from sqlalchemy import Column, Integer, String, DateTime, Boolean +from config.database import Base + + + +class MetaSecurityCol(Base): + """ + 数据源控制表 + """ + __tablename__ = 'meta_security_col' + + colId = Column(String(50), primary_key=True, comment='问答id') + create_by = Column(String(20), default='', comment='创建者') + create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') + update_by = Column(String(20), default='', comment='更新者') + update_time = Column(DateTime, nullable=True, default=None, comment='更新时间') + dbRName = Column(String(50), default=None, comment='数据源名称') + dbRID = Column(Integer, nullable=True, default=None, comment='数据源ID') + dbSName = Column(String(50), default=None, comment='模式名称') + dbTName = Column(String(50), default=None, comment='表名称') + dbCName = Column(String(50), default=None, comment='字段名称') + ctrl_type = Column(String(1), default=None, comment='控制类型(0:反向 1:正向)') + obj_type = Column(String(1), default=None, comment='对象类型(0:角色 1:用户)') + obj_value = Column(Integer, default=None, comment='角色值') + isStop = Column(Boolean, nullable=True, default=None, comment='是否停用(0:运行 1:停用)') + + + + +class MetaSecurityRow(Base): + """ + 数据源行控制表 + """ + __tablename__ = 'meta_security_row' + + rowId = Column(String(50), primary_key=True, comment='问答id') + create_by = Column(String(20), default='', comment='创建者') + create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') + update_by = Column(String(20), default='', comment='更新者') + update_time = Column(DateTime, nullable=True, default=None, comment='更新时间') + dbRName = Column(String(50), default=None, comment='数据源名称') + dbRID = Column(Integer, nullable=True, default=None, comment='数据源ID') + dbSName = Column(String(50), default=None, comment='模式名称') + dbTName = Column(String(50), default=None, comment='表名称') + dbCName = Column(String(50), default=None, comment='字段名称') + ctrl_type = Column(String(1), default=None, comment='控制类型(0:控制值 1:控制表 2:控制程序)') + obj_type = Column(String(1), default=None, comment='对象类型(0:角色 1:用户)') + obj_value = Column(String(50), default=None, comment='角色值') + isStop = Column(Boolean, nullable=True, default=None, comment='是否停用(0:运行 1:停用)') + ctrl_value = Column(String(100), default=None, comment='控制值') + ctrl_table = Column(String(100), default=None, comment='控制表') + ctrl_col = Column(String(100), default=None, comment='控制字段') + ctrl_system = Column(String(100), default=None, comment='控制程序') + diff --git a/vue-fastapi-backend/module_admin/entity/vo/metasecurity_vo.py b/vue-fastapi-backend/module_admin/entity/vo/metasecurity_vo.py new file mode 100644 index 0000000..c775ea0 --- /dev/null +++ b/vue-fastapi-backend/module_admin/entity/vo/metasecurity_vo.py @@ -0,0 +1,79 @@ +from pydantic import BaseModel +from typing import Union, Optional, List +from datetime import datetime +from module_admin.annotation.pydantic_annotation import as_query +from pydantic import BaseModel, ConfigDict, Field +from pydantic.alias_generators import to_camel + + +class CrudMetaSecurityModel(BaseModel): + is_success: bool + message: str + + +class MetaSecurityRowModel(BaseModel): + """ + 数据源行控制表对应Pydantic模型 + """ + model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) + rowId: Optional[str] = None + create_by: Optional[str] = None + create_time: Optional[datetime] = None + update_by: Optional[str] = None + update_time: Optional[datetime] = None + dbRName: Optional[str] = None + dbRID: Optional[int] = None + dbSName: Optional[str] = None + dbTName: Optional[str] = None + dbCName: Optional[str] = None + ctrl_type: Optional[str] = None # control type (e.g., '0', '1', '2') + obj_type: Optional[str] = None # object type (e.g., '0', '1') + obj_value: Optional[object] = None + isStop: Optional[bool] = None + ctrl_value: Optional[str] = None + ctrl_table: Optional[str] = None + ctrl_col: Optional[str] = None + ctrl_system: Optional[str] = None + + + +class MetaSecurityColModel(BaseModel): + """ + 数据源控制表对应Pydantic模型 + """ + model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) + colId: Optional[str] = None + create_by: Optional[str] = None + create_time: Optional[datetime] = None + update_by: Optional[str] = None + update_time: Optional[datetime] = None + dbRName: Optional[str] = None + dbRID: Optional[int] = None + dbSName: Optional[str] = None + dbTName: Optional[str] = None + dbCName: Optional[str] = None + ctrl_type: Optional[str] = None # control type (e.g., '0', '1') + obj_type: Optional[str] = None # object type (e.g., '0', '1') + obj_value: Optional[object] = None + isStop: Optional[bool] = None +@as_query +class MetaSecurityRowPageQueryModel(MetaSecurityRowModel): + """ + 元数据任务分页查询模型 + """ + page_num: int = Field(default=1, description='当前页码') + page_size: int = Field(default=10, description='每页记录数') +@as_query +class MetaSecurityColPageQueryModel(MetaSecurityColModel): + """ + 元数据任务分页查询模型 + """ + page_num: int = Field(default=1, description='当前页码') + page_size: int = Field(default=10, description='每页记录数') + +class DeleteMetaSecurityModel(BaseModel): + """ + 删除参数配置模型 + """ + model_config = ConfigDict(alias_generator=to_camel) + metaSecurity_ids: str = Field(description='需要删除的参数主键') diff --git a/vue-fastapi-backend/module_admin/service/metasecurity_service.py b/vue-fastapi-backend/module_admin/service/metasecurity_service.py new file mode 100644 index 0000000..94da370 --- /dev/null +++ b/vue-fastapi-backend/module_admin/service/metasecurity_service.py @@ -0,0 +1,270 @@ +from fastapi import Request +from sqlalchemy.ext.asyncio import AsyncSession +from typing import List +from config.constant import CommonConstant +from exceptions.exception import ServiceException +from module_admin.dao.metaSecurity_dao import MetaSecurityDao +from module_admin.entity.vo.common_vo import CrudResponseModel +from module_admin.entity.vo.metasecurity_vo import MetaSecurityColModel, MetaSecurityRowModel,DeleteMetaSecurityModel +from utils.common_util import CamelCaseUtil +import uuid + + +class MetaSecurityService: + """ + 数据源安全管理模块服务层 + """ + + @classmethod + async def get_meta_security_col_list_services( + cls, query_db: AsyncSession, query_object: MetaSecurityColModel, is_page: bool = False + ): + """ + 获取列配置列表信息service + + :param query_db: orm对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 列配置列表信息对象 + """ + col_list_result = await MetaSecurityDao.get_meta_security_col_list(query_db, query_object, is_page) + return col_list_result + + @classmethod + async def get_meta_security_row_list_services( + cls, query_db: AsyncSession, query_object: MetaSecurityRowModel, is_page: bool = False + ): + """ + 获取行配置列表信息service + + :param query_db: orm对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 行配置列表信息对象 + """ + row_list_result = await MetaSecurityDao.get_meta_security_row_list(query_db, query_object, is_page) + return row_list_result + + @classmethod + async def get_meta_security_col_by_id_services(cls, query_db: AsyncSession, colId: str): + """ + 获取列配置详细信息service + + :param query_db: orm对象 + :param colId: 列配置ID + :return: 列配置详细信息对象 + """ + col = await MetaSecurityDao.get_meta_security_col_by_id(query_db, colId) + if col: + result = MetaSecurityColModel(**CamelCaseUtil.transform_result(col)) + else: + result = MetaSecurityColModel(**dict()) + return result + + @classmethod + async def get_meta_security_row_by_id_services(cls, query_db: AsyncSession, rowId: str): + """ + 获取行配置详细信息service + + :param query_db: orm对象 + :param rowId: 行配置ID + :return: 行配置详细信息对象 + """ + row = await MetaSecurityDao.get_meta_security_row_by_id(query_db, rowId) + if row: + result = MetaSecurityRowModel(**CamelCaseUtil.transform_result(row)) + else: + result = MetaSecurityRowModel(**dict()) + return result + + @classmethod + async def add_meta_security_col_services(cls, request: Request, query_db: AsyncSession, page_object: MetaSecurityColModel): + """ + 新增列配置服务 + + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 新增的列配置对象 + :return: 新增列配置校验结果 + """ + try: + if isinstance(page_object.obj_value, str) and page_object.obj_value: + obj_values = page_object.obj_value.split(",") + for value in obj_values: + # 创建新的 page_object 实例,避免修改原始对象 + new_page_object = MetaSecurityColModel(**page_object.model_dump(by_alias=True)) + new_page_object.obj_value = value.strip() # 去除空格并赋值 + new_page_object.colId = str(uuid.uuid4()) + # 调用 DAO 方法插入数据 + await MetaSecurityDao.add_meta_security_col(query_db, new_page_object) + await query_db.commit() + return CrudResponseModel(is_success=True, message='新增列配置成功') + except Exception as e: + await query_db.rollback() + raise e + + @classmethod + async def add_meta_security_row_services(cls, request: Request, query_db: AsyncSession, page_object: MetaSecurityRowModel): + """ + 新增行配置服务 + + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 新增的行配置对象 + :return: 新增行配置校验结果 + """ + try: + if isinstance(page_object.obj_value, str) and page_object.obj_value: + obj_values = page_object.obj_value.split(",") + for value in obj_values: + # 创建新的 page_object 实例,避免修改原始对象 + new_page_object = MetaSecurityRowModel(**page_object.model_dump(by_alias=True)) + new_page_object.obj_value = value.strip() # 去除空格并赋值 + new_page_object.rowId = str(uuid.uuid4()) + # 调用 DAO 方法插入数据 + await MetaSecurityDao.add_meta_security_row(query_db, new_page_object) + await query_db.commit() + + # 缓存相关操作,如果需要 + # await request.app.state.redis.set(...) + + return CrudResponseModel(is_success=True, message='新增行配置成功') + + except Exception as e: + await query_db.rollback() + raise e + @classmethod + async def col_detail_services(cls, query_db: AsyncSession, col: str): + """ + 获取参数配置详细信息service + + :param query_db: orm对象 + :param config_id: 参数配置id + :return: 参数配置id对应的信息 + """ + config = await MetaSecurityDao.get_meta_security_col_by_id(query_db, col) + if config: + result = MetaSecurityColModel(**CamelCaseUtil.transform_result(config)) + else: + result = MetaSecurityColModel(**dict()) + + return result + @classmethod + async def row_detail_services(cls, query_db: AsyncSession, row_id: str): + """ + 获取参数配置详细信息service + + :param query_db: orm对象 + :param config_id: 参数配置id + :return: 参数配置id对应的信息 + """ + config = await MetaSecurityDao.get_meta_security_row_by_id(query_db, row_id) + if config: + result = MetaSecurityRowModel(**CamelCaseUtil.transform_result(config)) + else: + result = MetaSecurityRowModel(**dict()) + + return result + @classmethod + async def edit_meta_security_col_services(cls, request: Request, query_db: AsyncSession, page_object: MetaSecurityColModel): + """ + 编辑列配置服务 + + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 编辑的列配置对象 + :return: 编辑列配置校验结果 + """ + edit_col = page_object.model_dump(exclude_unset=True) + col_info = await cls.get_meta_security_col_by_id_services(query_db, page_object.colId) + + if col_info: + try: + await MetaSecurityDao.update_meta_security_col(query_db, edit_col) + await query_db.commit() + + # 缓存更新,如果需要 + # await request.app.state.redis.set(...) + + return CrudResponseModel(is_success=True, message='编辑列配置成功') + except Exception as e: + await query_db.rollback() + raise e + else: + raise ServiceException(message=f'列配置{page_object.colId}不存在') + + @classmethod + async def edit_meta_security_row_services(cls, request: Request, query_db: AsyncSession, page_object: MetaSecurityRowModel): + """ + 编辑行配置服务 + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 编辑的行配置对象 + :return: 编辑行配置校验结果 + """ + edit_row = page_object.model_dump(exclude_unset=True) + row_info = await cls.get_meta_security_row_by_id_services(query_db, page_object.rowId) + if row_info: + try: + await MetaSecurityDao.update_meta_security_row(query_db, edit_row) + await query_db.commit() + return CrudResponseModel(is_success=True, message='编辑行配置成功') + except Exception as e: + await query_db.rollback() + raise e + else: + raise ServiceException(message=f'行配置{page_object.rowId}不存在') + + @classmethod + async def delete_meta_security_col_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteMetaSecurityModel): + """ + 删除列配置服务 + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 删除列配置对象 + :return: 删除列配置校验结果 + """ + if page_object.metaSecurity_ids: + col_id_list = page_object.metaSecurity_ids.split(',') + try: + for col_id in col_id_list: + col_info = await cls.get_meta_security_col_by_id_services(query_db, col_id) + if col_info: + # 校验不能删除的系统内置列 + await MetaSecurityDao.delete_meta_security_col(query_db, col_id) + await query_db.commit() + + + return CrudResponseModel(is_success=True, message='删除列配置成功') + except Exception as e: + await query_db.rollback() + raise e + else: + raise ServiceException(message='传入列配置ID为空') + + @classmethod + async def delete_meta_security_row_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteMetaSecurityModel): + """ + 删除行配置服务 + + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 删除行配置对象 + :return: 删除行配置校验结果 + """ + if page_object.metaSecurity_ids: + row_id_list = page_object.metaSecurity_ids.split(',') + try: + for row_id in row_id_list: + row_info = await cls.get_meta_security_row_by_id_services(query_db, row_id) + if row_info: + await MetaSecurityDao.delete_meta_security_row(query_db, row_id) + await query_db.commit() + return CrudResponseModel(is_success=True, message='删除行配置成功') + except Exception as e: + await query_db.rollback() + raise e + else: + raise ServiceException(message='传入行配置ID为空') + + \ No newline at end of file diff --git a/vue-fastapi-backend/server.py b/vue-fastapi-backend/server.py index 249e182..ed6968a 100644 --- a/vue-fastapi-backend/server.py +++ b/vue-fastapi-backend/server.py @@ -24,6 +24,7 @@ from module_admin.controller.server_controller import serverController from module_admin.controller.user_controller import userController from module_admin.controller.aichat_controller import aichatController from module_admin.controller.metatask_controller import metataskController +from module_admin.controller.metasecurity_controller import metaSecurityController from sub_applications.handle import handle_sub_applications from utils.common_util import worship from utils.log_util import logger @@ -80,6 +81,7 @@ controller_list = [ {'router': cacheController, 'tags': ['系统监控-缓存监控']}, {'router': commonController, 'tags': ['通用模块']}, {'router': metataskController, 'tags': ['元数据管理-元数据任务模块']}, + {'router': metaSecurityController, 'tags': ['元数据管理-数据安全']}, {'router': aichatController, 'tags': ['智能问答模块']}, ] diff --git a/vue-fastapi-frontend/src/api/meta/metasercurity.js b/vue-fastapi-frontend/src/api/meta/metasercurity.js new file mode 100644 index 0000000..f4a61cd --- /dev/null +++ b/vue-fastapi-frontend/src/api/meta/metasercurity.js @@ -0,0 +1,108 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/ruoyi"; + +// 查询列配置列表 +export function listMetaSecurityCol(query) { + return request({ + url: '/default-api/meta/metaSecurity/col/list', + method: 'get', + params: query + }) +} + +// 查询行配置列表 +export function listMetaSecurityRow(query) { + return request({ + url: '/default-api/meta/metaSecurity/row/list', + method: 'get', + params: query + }) +} + +// 查询列配置详情 +export function getMetaSecurityCol(colId) { + return request({ + url: '/default-api/meta/metaSecurity/col/' + parseStrEmpty(colId), + method: 'get' + }) +} + +// 查询行配置详情 +export function getMetaSecurityRow(rowId) { + return request({ + url: '/default-api/meta/metaSecurity/row/' + parseStrEmpty(rowId), + method: 'get' + }) +} + +// 新增列配置 +export function addMetaSecurityCol(data) { + return request({ + url: '/default-api/meta/metaSecurity/col', + method: 'post', + data: data + }) +} + +// 新增行配置 +export function addMetaSecurityRow(data) { + return request({ + url: '/default-api/meta/metaSecurity/row', + method: 'post', + data: data + }) +} + +// 修改列配置 +export function updateMetaSecurityCol(data) { + return request({ + url: '/default-api/meta/metaSecurity/col', + method: 'put', + data: data + }) +} + +// 修改行配置 +export function updateMetaSecurityRow(data) { + return request({ + url: '/default-api/meta/metaSecurity/row', + method: 'put', + data: data + }) +} + +// 删除列配置 +export function deleteMetaSecurityCol(colId) { + return request({ + url: '/default-api/meta/metaSecurity/col/' + colId, + method: 'delete' + }) +} + +// 删除行配置 +export function deleteMetaSecurityRow(rowId) { + return request({ + url: '/default-api/meta/metaSecurity/row/' + rowId, + method: 'delete' + }) +} + +// 批量删除列配置 +export function deleteMetaSecurityCols(colIds) { + return request({ + url: '/default-api/meta/metaSecurity/col/' + colIds, + method: 'delete' + }) +} + +// 批量删除行配置 +export function deleteMetaSecurityRows(rowIds) { + return request({ + url: '/default-api/meta/metaSecurity/row/' + rowIds, + method: 'delete' + }) +} + + + + diff --git a/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue b/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue new file mode 100644 index 0000000..98420a3 --- /dev/null +++ b/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue @@ -0,0 +1,485 @@ + + + + diff --git a/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue b/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue new file mode 100644 index 0000000..f4a803c --- /dev/null +++ b/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue @@ -0,0 +1,489 @@ + + + + diff --git a/vue-fastapi-frontend/src/views/meta/metatask/index.vue b/vue-fastapi-frontend/src/views/meta/metatask/index.vue index 75f3fb1..1f936fc 100644 --- a/vue-fastapi-frontend/src/views/meta/metatask/index.vue +++ b/vue-fastapi-frontend/src/views/meta/metatask/index.vue @@ -654,12 +654,10 @@ const chooseRows = ref([]); // Watcher for dynamic changes watch(dbResoursName, (val) => { - if (val) { - // Filter the department tree when dbResoursName changes + proxy.$refs["tree"].filter(val); - } }); // watch(filterText, (val) => { // treeRef.value!.filter(val)