perf: controller层全部使用新依赖项

This commit is contained in:
insistence
2025-12-11 16:59:18 +08:00
parent 9a1c53d9f4
commit 184982eb08
17 changed files with 687 additions and 399 deletions
@@ -3,16 +3,17 @@ from datetime import datetime
from typing import Annotated, Literal, Optional, Union
import aiofiles
from fastapi import APIRouter, Depends, File, Form, Path, Query, Request, Response, UploadFile
from fastapi import APIRouter, File, Form, Path, Query, Request, Response, UploadFile
from pydantic_validation_decorator import ValidateFields
from sqlalchemy.ext.asyncio import AsyncSession
from common.annotation.log_annotation import Log
from common.aspect.data_scope import GetDataScope
from common.aspect.interface_auth import CheckUserInterfaceAuth
from common.aspect.data_scope import DataScopeDependency
from common.aspect.db_seesion import DBSessionDependency
from common.aspect.interface_auth import UserInterfaceAuthDependency
from common.aspect.pre_auth import CurrentUserDependency, PreAuthDependency
from common.enums import BusinessType
from config.env import UploadConfig
from config.get_db import get_db
from module_admin.entity.vo.dept_vo import DeptModel
from module_admin.entity.vo.user_vo import (
AddUserModel,
@@ -31,7 +32,6 @@ from module_admin.entity.vo.user_vo import (
UserRoleResponseModel,
)
from module_admin.service.dept_service import DeptService
from module_admin.service.login_service import LoginService
from module_admin.service.role_service import RoleService
from module_admin.service.user_service import UserService
from utils.common_util import bytes2file_response
@@ -41,14 +41,17 @@ from utils.pwd_util import PwdUtil
from utils.response_util import ResponseUtil
from utils.upload_util import UploadUtil
user_controller = APIRouter(prefix='/system/user', dependencies=[Depends(LoginService.get_current_user)])
user_controller = APIRouter(prefix='/system/user', dependencies=[PreAuthDependency()])
@user_controller.get('/deptTree', dependencies=[Depends(CheckUserInterfaceAuth('system:user:list'))])
@user_controller.get(
'/deptTree',
dependencies=[UserInterfaceAuthDependency('system:user:list')],
)
async def get_system_dept_tree(
request: Request,
query_db: Annotated[AsyncSession, Depends(get_db)],
data_scope_sql: Annotated[str, Depends(GetDataScope('SysDept'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
data_scope_sql: Annotated[str, DataScopeDependency('SysDept')],
) -> Response:
dept_query_result = await DeptService.get_dept_tree_services(query_db, DeptModel(), data_scope_sql)
logger.info('获取成功')
@@ -57,13 +60,15 @@ async def get_system_dept_tree(
@user_controller.get(
'/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('system:user:list'))]
'/list',
response_model=PageResponseModel,
dependencies=[UserInterfaceAuthDependency('system:user:list')],
)
async def get_system_user_list(
request: Request,
user_page_query: Annotated[UserPageQueryModel, Query()],
query_db: Annotated[AsyncSession, Depends(get_db)],
data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
) -> Response:
# 获取分页数据
user_page_query_result = await UserService.get_user_list_services(
@@ -74,16 +79,19 @@ async def get_system_user_list(
return ResponseUtil.success(model_content=user_page_query_result)
@user_controller.post('', dependencies=[Depends(CheckUserInterfaceAuth('system:user:add'))])
@user_controller.post(
'',
dependencies=[UserInterfaceAuthDependency('system:user:add')],
)
@ValidateFields(validate_model='add_user')
@Log(title='用户管理', business_type=BusinessType.INSERT)
async def add_system_user(
request: Request,
add_user: AddUserModel,
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
dept_data_scope_sql: Annotated[str, Depends(GetDataScope('SysDept'))],
role_data_scope_sql: Annotated[str, Depends(GetDataScope('SysDept'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
dept_data_scope_sql: Annotated[str, DataScopeDependency('SysDept')],
role_data_scope_sql: Annotated[str, DataScopeDependency('SysDept')],
) -> Response:
if not current_user.user.admin:
await DeptService.check_dept_data_scope_services(query_db, add_user.dept_id, dept_data_scope_sql)
@@ -101,17 +109,20 @@ async def add_system_user(
return ResponseUtil.success(msg=add_user_result.message)
@user_controller.put('', dependencies=[Depends(CheckUserInterfaceAuth('system:user:edit'))])
@user_controller.put(
'',
dependencies=[UserInterfaceAuthDependency('system:user:edit')],
)
@ValidateFields(validate_model='edit_user')
@Log(title='用户管理', business_type=BusinessType.UPDATE)
async def edit_system_user(
request: Request,
edit_user: EditUserModel,
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
user_data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
dept_data_scope_sql: Annotated[str, Depends(GetDataScope('SysDept'))],
role_data_scope_sql: Annotated[str, Depends(GetDataScope('SysDept'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
user_data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
dept_data_scope_sql: Annotated[str, DataScopeDependency('SysDept')],
role_data_scope_sql: Annotated[str, DataScopeDependency('SysDept')],
) -> Response:
await UserService.check_user_allowed_services(edit_user)
if not current_user.user.admin:
@@ -128,14 +139,17 @@ async def edit_system_user(
return ResponseUtil.success(msg=edit_user_result.message)
@user_controller.delete('/{user_ids}', dependencies=[Depends(CheckUserInterfaceAuth('system:user:remove'))])
@user_controller.delete(
'/{user_ids}',
dependencies=[UserInterfaceAuthDependency('system:user:remove')],
)
@Log(title='用户管理', business_type=BusinessType.DELETE)
async def delete_system_user(
request: Request,
user_ids: Annotated[str, Path(description='需要删除的用户ID')],
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
) -> Response:
user_id_list = user_ids.split(',') if user_ids else []
if user_id_list:
@@ -154,14 +168,17 @@ async def delete_system_user(
return ResponseUtil.success(msg=delete_user_result.message)
@user_controller.put('/resetPwd', dependencies=[Depends(CheckUserInterfaceAuth('system:user:resetPwd'))])
@user_controller.put(
'/resetPwd',
dependencies=[UserInterfaceAuthDependency('system:user:resetPwd')],
)
@Log(title='用户管理', business_type=BusinessType.UPDATE)
async def reset_system_user_pwd(
request: Request,
reset_user: EditUserModel,
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
) -> Response:
await UserService.check_user_allowed_services(reset_user)
if not current_user.user.admin:
@@ -180,14 +197,17 @@ async def reset_system_user_pwd(
return ResponseUtil.success(msg=edit_user_result.message)
@user_controller.put('/changeStatus', dependencies=[Depends(CheckUserInterfaceAuth('system:user:edit'))])
@user_controller.put(
'/changeStatus',
dependencies=[UserInterfaceAuthDependency('system:user:edit')],
)
@Log(title='用户管理', business_type=BusinessType.UPDATE)
async def change_system_user_status(
request: Request,
change_user: EditUserModel,
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
) -> Response:
await UserService.check_user_allowed_services(change_user)
if not current_user.user.admin:
@@ -208,8 +228,8 @@ async def change_system_user_status(
@user_controller.get('/profile', response_model=UserProfileModel)
async def query_detail_system_user_profile(
request: Request,
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
) -> Response:
profile_user_result = await UserService.user_profile_services(query_db, current_user.user.user_id)
logger.info(f'获取user_id为{current_user.user.user_id}的信息成功')
@@ -218,16 +238,20 @@ async def query_detail_system_user_profile(
@user_controller.get(
'/{user_id}', response_model=UserDetailModel, dependencies=[Depends(CheckUserInterfaceAuth('system:user:query'))]
'/{user_id}',
response_model=UserDetailModel,
dependencies=[UserInterfaceAuthDependency('system:user:query')],
)
@user_controller.get(
'/', response_model=UserDetailModel, dependencies=[Depends(CheckUserInterfaceAuth('system:user:query'))]
'/',
response_model=UserDetailModel,
dependencies=[UserInterfaceAuthDependency('system:user:query')],
)
async def query_detail_system_user(
request: Request,
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
user_id: Optional[Union[int, Literal['']]] = '',
) -> Response:
if user_id and not current_user.user.admin:
@@ -243,8 +267,8 @@ async def query_detail_system_user(
async def change_system_user_profile_avatar(
request: Request,
avatarfile: Annotated[bytes, File()],
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
) -> Response:
if avatarfile:
relative_path = (
@@ -278,8 +302,8 @@ async def change_system_user_profile_avatar(
async def change_system_user_profile_info(
request: Request,
user_info: UserInfoModel,
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
) -> Response:
edit_user = EditUserModel(
**user_info.model_dump(exclude_unset=True, by_alias=True, exclude={'role_ids', 'post_ids'}),
@@ -302,8 +326,8 @@ async def change_system_user_profile_info(
async def reset_system_user_password(
request: Request,
reset_password: ResetPasswordModel,
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
) -> Response:
reset_user = ResetUserModel(
userId=current_user.user.user_id,
@@ -319,16 +343,19 @@ async def reset_system_user_password(
return ResponseUtil.success(msg=reset_user_result.message)
@user_controller.post('/importData', dependencies=[Depends(CheckUserInterfaceAuth('system:user:import'))])
@user_controller.post(
'/importData',
dependencies=[UserInterfaceAuthDependency('system:user:import')],
)
@Log(title='用户管理', business_type=BusinessType.IMPORT)
async def batch_import_system_user(
request: Request,
file: Annotated[UploadFile, File(...)],
update_support: Annotated[bool, Query(alias='updateSupport')],
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
user_data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
dept_data_scope_sql: Annotated[str, Depends(GetDataScope('SysDept'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
user_data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
dept_data_scope_sql: Annotated[str, DataScopeDependency('SysDept')],
) -> Response:
batch_import_result = await UserService.batch_import_user_services(
request, query_db, file, update_support, current_user, user_data_scope_sql, dept_data_scope_sql
@@ -338,21 +365,29 @@ async def batch_import_system_user(
return ResponseUtil.success(msg=batch_import_result.message)
@user_controller.post('/importTemplate', dependencies=[Depends(CheckUserInterfaceAuth('system:user:import'))])
async def export_system_user_template(request: Request, query_db: Annotated[AsyncSession, Depends(get_db)]) -> Response:
@user_controller.post(
'/importTemplate',
dependencies=[UserInterfaceAuthDependency('system:user:import')],
)
async def export_system_user_template(
request: Request, query_db: Annotated[AsyncSession, DBSessionDependency()]
) -> Response:
user_import_template_result = await UserService.get_user_import_template_services()
logger.info('获取成功')
return ResponseUtil.streaming(data=bytes2file_response(user_import_template_result))
@user_controller.post('/export', dependencies=[Depends(CheckUserInterfaceAuth('system:user:export'))])
@user_controller.post(
'/export',
dependencies=[UserInterfaceAuthDependency('system:user:export')],
)
@Log(title='用户管理', business_type=BusinessType.EXPORT)
async def export_system_user_list(
request: Request,
user_page_query: Annotated[UserPageQueryModel, Form()],
query_db: Annotated[AsyncSession, Depends(get_db)],
data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
) -> Response:
# 获取全量数据
user_query_result = await UserService.get_user_list_services(
@@ -367,12 +402,12 @@ async def export_system_user_list(
@user_controller.get(
'/authRole/{user_id}',
response_model=UserRoleResponseModel,
dependencies=[Depends(CheckUserInterfaceAuth('system:user:query'))],
dependencies=[UserInterfaceAuthDependency('system:user:query')],
)
async def get_system_allocated_role_list(
request: Request,
user_id: Annotated[int, Path(description='用户ID')],
query_db: Annotated[AsyncSession, Depends(get_db)],
query_db: Annotated[AsyncSession, DBSessionDependency()],
) -> Response:
user_role_query = UserRoleQueryModel(userId=user_id)
user_role_allocated_query_result = await UserService.get_user_role_allocated_list_services(
@@ -386,17 +421,17 @@ async def get_system_allocated_role_list(
@user_controller.put(
'/authRole',
response_model=UserRoleResponseModel,
dependencies=[Depends(CheckUserInterfaceAuth('system:user:edit'))],
dependencies=[UserInterfaceAuthDependency('system:user:edit')],
)
@Log(title='用户管理', business_type=BusinessType.GRANT)
async def update_system_role_user(
request: Request,
user_id: Annotated[int, Query(alias='userId')],
role_ids: Annotated[str, Query(alias='roleIds')],
query_db: Annotated[AsyncSession, Depends(get_db)],
current_user: Annotated[CurrentUserModel, Depends(LoginService.get_current_user)],
user_data_scope_sql: Annotated[str, Depends(GetDataScope('SysUser'))],
role_data_scope_sql: Annotated[str, Depends(GetDataScope('SysDept'))],
query_db: Annotated[AsyncSession, DBSessionDependency()],
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
user_data_scope_sql: Annotated[str, DataScopeDependency('SysUser')],
role_data_scope_sql: Annotated[str, DataScopeDependency('SysDept')],
) -> Response:
if not current_user.user.admin:
await UserService.check_user_data_scope_services(query_db, user_id, user_data_scope_sql)