Browse Source

数据安全配置

master
siyaqi 2 weeks ago
parent
commit
bfbe35a47b
  1. 65
      vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
  2. 66
      vue-fastapi-backend/module_admin/dao/datasec_config_dao.py
  3. 53
      vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
  4. 17
      vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py
  5. 21
      vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py
  6. 77
      vue-fastapi-backend/module_admin/service/datasec_config_service.py
  7. 42
      vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js

65
vue-fastapi-backend/module_admin/controller/metadata_config_controller.py

@ -21,10 +21,12 @@ from module_admin.entity.vo.metadata_config_vo import (
BatchDataopLabelConfigModelVo, BatchDataopLabelConfigModelVo,
BatchDataopLabelModelPageQueryModel, BatchDataopLabelModelPageQueryModel,
BatchDatatypeLabelConfigPageQueryModel, BatchDatatypeLabelConfigPageQueryModel,
SecuBizPermiConfigQueryModel, DatasecConfigPageQueryModel,
DatasecConfigModel,
) )
from module_admin.service.metadata_config_service import MetadataConfigService from module_admin.service.metadata_config_service import MetadataConfigService
from module_admin.service.batch_label_config_service import BatchLabelConfigService from module_admin.service.batch_label_config_service import BatchLabelConfigService
from module_admin.service.datasec_config_service import DatasecConfigService
from config.get_db import get_db from config.get_db import get_db
from utils.response_util import ResponseUtil from utils.response_util import ResponseUtil
from utils.page_util import PageResponseModel from utils.page_util import PageResponseModel
@ -484,3 +486,64 @@ async def get_datatype_label_detail(
result = await BatchLabelConfigService.get_datatype_detail_services(query_db, onum) result = await BatchLabelConfigService.get_datatype_detail_services(query_db, onum)
logger.info(f'获取数据类型标签配置 onum={onum} 详情成功') logger.info(f'获取数据类型标签配置 onum={onum} 详情成功')
return ResponseUtil.success(data=result) return ResponseUtil.success(data=result)
@metadataConfigController.get("/datasecConfig/list", response_model=PageResponseModel)
async def get_datasec_config_list(
request: Request,
query: DatasecConfigModel = Depends(DatasecConfigPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db),
):
result = await DatasecConfigService.get_datasec_list_services(query_db, query, False)
logger.info("获取数据安全参数配置列表成功")
return ResponseUtil.success(data=result)
@metadataConfigController.post("/datasecConfig")
@ValidateFields(validate_model="add_datasec_config")
async def add_datasec_config(
request: Request,
model: DatasecConfigModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
model.create_by = current_user.user.user_name
model.create_time = datetime.now()
result = await DatasecConfigService.add_datasec_services(query_db, model)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.put("/datasecConfig")
@ValidateFields(validate_model="edit_datasec_config")
async def edit_datasec_config(
request: Request,
model: DatasecConfigModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
model.update_by = current_user.user.user_name
model.update_time = datetime.now()
result = await DatasecConfigService.edit_datasec_services(query_db, model)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete("/datasecConfig/{onum_list}")
async def delete_datasec_config(
request: Request,
onum_list: str,
query_db: AsyncSession = Depends(get_db),
):
result = await DatasecConfigService.delete_datasec_services(query_db, onum_list)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get("/datasecConfig/{onum}", response_model=DatasecConfigModel)
async def get_datasec_config_detail(
request: Request,
onum: int,
query_db: AsyncSession = Depends(get_db),
):
result = await DatasecConfigService.get_datasec_detail_services(query_db, onum)
logger.info(f"获取数据安全参数配置 onum={onum} 详情成功")
return ResponseUtil.success(data=result)

66
vue-fastapi-backend/module_admin/dao/datasec_config_dao.py

@ -0,0 +1,66 @@
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
from sqlalchemy import update, delete
from datetime import datetime, time
from typing import List
from module_admin.entity.do.metadata_config_do import DatasecConfig # ORM 类
from utils.page_util import PageUtil
class DatasecConfigDao:
"""
数据安全参数配置表 DAO
"""
@classmethod
async def get_detail_by_id(cls, db: AsyncSession, onum: int):
"""
根据主键获取详情
"""
result = await db.execute(select(DatasecConfig).where(DatasecConfig.onum == onum))
return result.scalars().first()
@classmethod
async def get_list(cls, db: AsyncSession, query_object, is_page: bool = False):
"""
获取数据列表支持分页
"""
query = select(DatasecConfig).where(
DatasecConfig.metatask_name.like(f"%{query_object.metatask_name}%") if query_object.metatask_name else True,
DatasecConfig.status == query_object.status if query_object.status else True,
DatasecConfig.create_time.between(
datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(0, 0, 0)),
datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time(23, 59, 59)),
) if query_object.begin_time and query_object.end_time else True
).order_by(DatasecConfig.onum)
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod
async def add(cls, db: AsyncSession, model_obj):
"""
新增任务配置
"""
db_obj = DatasecConfig(**model_obj.model_dump())
db.add(db_obj)
await db.flush()
return db_obj
@classmethod
async def edit(cls, db: AsyncSession, onum: int, update_dict: dict):
"""
编辑任务配置
"""
await db.execute(
update(DatasecConfig)
.where(DatasecConfig.onum == onum)
.values(**update_dict)
)
@classmethod
async def delete(cls, db: AsyncSession, onum_list: List[int]):
"""
批量删除任务配置
"""
await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_(onum_list)))

53
vue-fastapi-backend/module_admin/dao/metadata_config_dao.py

@ -2,7 +2,7 @@ from datetime import datetime, time
from sqlalchemy import delete, select, update,and_ from sqlalchemy import delete, select, update,and_
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.do.meta_do import MetadataClas,MetadataExtractInfo # ORM 类 from module_admin.entity.do.meta_do import MetadataClas,MetadataExtractInfo # ORM 类
from module_admin.entity.do.metadata_config_do import MetadataSec,SecuBizConfig,SecuBizPermiConfig,SecuBizConfigRela # ORM 类 from module_admin.entity.do.metadata_config_do import MetadataSec,SecuBizConfig,SecuBizPermiConfig,SecuBizConfigRela,DatasecConfig # ORM 类
from typing import List from typing import List
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
@ -260,3 +260,54 @@ class MetadataConfigDao:
.where(SecuBizConfigRela.biz_onum == biz_onum) .where(SecuBizConfigRela.biz_onum == biz_onum)
) )
return result.scalars().all() return result.scalars().all()
@classmethod
async def get_detail_by_id(cls, db: AsyncSession, onum: int):
"""
根据主键获取详情
"""
result = await db.execute(select(DatasecConfig).where(DatasecConfig.onum == onum))
return result.scalars().first()
@classmethod
async def get_list(cls, db: AsyncSession, query_object, is_page: bool = False):
"""
获取数据列表支持分页
"""
query = select(DatasecConfig).where(
DatasecConfig.metatask_name.like(f"%{query_object.metatask_name}%") if query_object.metatask_name else True,
DatasecConfig.status == query_object.status if query_object.status else True,
DatasecConfig.create_time.between(
datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(0, 0, 0)),
datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time(23, 59, 59)),
) if query_object.begin_time and query_object.end_time else True
).order_by(DatasecConfig.onum)
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod
async def add(cls, db: AsyncSession, model_obj):
"""
新增任务配置
"""
db_obj = DatasecConfig(**model_obj.model_dump())
db.add(db_obj)
await db.flush()
return db_obj
@classmethod
async def edit(cls, db: AsyncSession, onum: int, update_dict: dict):
"""
编辑任务配置
"""
await db.execute(
update(DatasecConfig)
.where(DatasecConfig.onum == onum)
.values(**update_dict)
)
@classmethod
async def delete(cls, db: AsyncSession, onum_list: List[int]):
"""
批量删除任务配置
"""
await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_(onum_list)))

17
vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py

@ -114,3 +114,20 @@ class BatchDatatypeLabelConfig(Base):
mdl_name = Column(String(50), nullable=True) mdl_name = Column(String(50), nullable=True)
upd_by = Column(String(50), nullable=True) upd_by = Column(String(50), nullable=True)
upd_time = Column(DateTime, nullable=True, comment='更新时间') upd_time = Column(DateTime, nullable=True, comment='更新时间')
class DatasecConfig(Base):
"""
数据安全参数配置 ORM 映射类对应表 t_datasec_config
"""
__tablename__ = "t_datasec_config"
onum = Column(Integer, primary_key=True, autoincrement=True, comment="任务主键")
metatask_name = Column(String(50), nullable=False, default="", comment="任务名称")
create_by = Column(String(64), nullable=False, default="", comment="创建者")
create_time = Column(DateTime, nullable=True, comment="创建时间")
update_by = Column(String(64), nullable=True, default="", comment="更新者")
update_time = Column(DateTime, nullable=True, comment="更新时间")
metatask_param = Column(String(500), nullable=True, comment="参数")
status = Column(String(10), nullable=False, default="N", comment="状态")
ds_time = Column(DateTime, nullable=True, comment="调度时间")
ds_ids = Column(String(50), nullable=True, comment="任务ID")
schId = Column(String(50), nullable=True, comment="调度id")

21
vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py

@ -315,3 +315,24 @@ class BatchDatatypeLabelConfigPageQueryModel(BatchDatatypeLabelConfigModel):
class BatchBusiLabelConfigPageQueryModel(BatchBusiLabelConfigModel): class BatchBusiLabelConfigPageQueryModel(BatchBusiLabelConfigModel):
page_num: int = Field(default=1, description='当前页码') page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数') page_size: int = Field(default=10, description='每页记录数')
class DatasecConfigModel(BaseModel):
"""
数据安全任务配置 Pydantic 模型对应表 t_datasec_config
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
onum: Optional[int] = Field(default=None, description="任务主键")
metatask_name: Optional[str] = Field(default=None, description="任务名称")
create_by: Optional[str] = Field(default=None, description="创建者")
create_time: Optional[datetime] = Field(default=None, description="创建时间")
update_by: Optional[str] = Field(default=None, description="更新者")
update_time: Optional[datetime] = Field(default=None, description="更新时间")
metatask_param: Optional[str] = Field(default=None, description="参数")
status: Optional[str] = Field(default="N", description="状态")
ds_time: Optional[datetime] = Field(default=None, description="调度时间")
ds_ids: Optional[str] = Field(default=None, description="任务ID")
schId: Optional[str] = Field(default=None, description="调度id")
@as_query
class DatasecConfigPageQueryModel(DatasecConfigModel):
page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')

77
vue-fastapi-backend/module_admin/service/datasec_config_service.py

@ -0,0 +1,77 @@
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.dao.datasec_config_dao import DatasecConfigDao
from module_admin.entity.vo.metadata_config_vo import DatasecConfigModel
from module_admin.entity.vo.common_vo import CrudResponseModel
from exceptions.exception import ServiceException
from utils.common_util import CamelCaseUtil
class DatasecConfigService:
"""
数据安全参数配置表 Service
"""
@classmethod
async def get_datasec_list_services(cls, db: AsyncSession, query_object, is_page: bool = False):
"""
获取配置列表支持分页
"""
return await DatasecConfigDao.get_list(db, query_object, is_page)
@classmethod
async def add_datasec_services(cls, db: AsyncSession, page_object: DatasecConfigModel):
"""
新增配置
"""
try:
await DatasecConfigDao.add(db, page_object)
await db.commit()
return CrudResponseModel(is_success=True, message="新增成功")
except Exception as e:
await db.rollback()
raise e
@classmethod
async def edit_datasec_services(cls, db: AsyncSession, page_object: DatasecConfigModel):
"""
编辑配置
"""
edit_data = page_object.model_dump(exclude_unset=True)
info = await cls.get_datasec_detail_services(db, page_object.onum)
if info and info.onum:
try:
await DatasecConfigDao.edit(db, page_object.onum, edit_data)
await db.commit()
return CrudResponseModel(is_success=True, message="更新成功")
except Exception as e:
await db.rollback()
raise e
else:
raise ServiceException(message="配置数据不存在")
@classmethod
async def delete_datasec_services(cls, db: AsyncSession, onum_list: str):
"""
批量删除配置
"""
id_list = [int(x.strip()) for x in onum_list.split(",") if x.strip().isdigit()]
if not id_list:
raise ServiceException(message="无效的编号列表")
try:
await DatasecConfigDao.delete(db, id_list)
await db.commit()
return CrudResponseModel(is_success=True, message="删除成功")
except Exception as e:
await db.rollback()
raise e
@classmethod
async def get_datasec_detail_services(cls, db: AsyncSession, onum: int):
"""
获取配置详情
"""
result = await DatasecConfigDao.get_detail_by_id(db, onum)
if result:
return DatasecConfigModel(**CamelCaseUtil.transform_result(result))
return DatasecConfigModel(**dict())

42
vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js

@ -315,3 +315,45 @@ export function getDatatypeLabelDetail(onum) {
method: 'get' method: 'get'
}) })
} }
// 获取数据安全参数配置列表(分页)
export function getDatasecConfigList(params) {
return request({
url: '/default-api/metadataConfig/datasecConfig/list',
method: 'get',
params
})
}
// 新增数据安全参数配置
export function addDatasecConfig(data) {
return request({
url: '/default-api/metadataConfig/datasecConfig',
method: 'post',
data
})
}
// 编辑数据安全参数配置
export function editDatasecConfig(data) {
return request({
url: '/default-api/metadataConfig/datasecConfig',
method: 'put',
data
})
}
// 删除数据安全参数配置
export function deleteDatasecConfig(onumList) {
return request({
url: '/default-api/metadataConfig/datasecConfig/' + onumList,
method: 'delete'
})
}
// 获取数据安全参数配置详情
export function getDatasecConfigDetail(onum) {
return request({
url: '/default-api/metadataConfig/datasecConfig/' + onum,
method: 'get'
})
}

Loading…
Cancel
Save