fix: 修复注册异常,删除用户异常,调整用户信息存储时间
This commit is contained in:
@@ -14,7 +14,7 @@ from annotation.auth import Auth
|
||||
from annotation.log import Log
|
||||
from config.constant import BusinessType, RedisKeyConfig
|
||||
from controller.login import LoginController
|
||||
from models import Department
|
||||
from models import Department, Role
|
||||
from schemas.common import BaseResponse, DeleteListParams
|
||||
from schemas.department import AddDepartmentParams, GetDepartmentInfoResponse, \
|
||||
GetDepartmentListResponse
|
||||
@@ -201,3 +201,36 @@ async def get_department_list(
|
||||
"page": page,
|
||||
"pageSize": pageSize
|
||||
})
|
||||
|
||||
|
||||
@departmentAPI.get("/roleList/{id}", response_model=GetDepartmentListResponse, response_class=JSONResponse,
|
||||
summary="用户获取部门角色列表")
|
||||
@Log(title="获取部门角色列表", business_type=BusinessType.SELECT)
|
||||
@Auth(["department:btn:list"])
|
||||
async def get_department_role_list(
|
||||
request: Request,
|
||||
id: str = Path(..., description="部门ID"),
|
||||
current_user: dict = Depends(LoginController.get_current_user)
|
||||
):
|
||||
sub_departments = current_user.get("sub_departments")
|
||||
if id not in sub_departments:
|
||||
return Response.error(msg="查询失败,无权限!")
|
||||
data = await Role.filter(department__id=id).values(
|
||||
id="id",
|
||||
department_id="department__id",
|
||||
department_name="department__name",
|
||||
department_phone="department__phone",
|
||||
department_principal="department__principal",
|
||||
department_email="department__email",
|
||||
role_name="name",
|
||||
role_code="code",
|
||||
role_id="id",
|
||||
create_time="create_time",
|
||||
update_time="update_time"
|
||||
)
|
||||
return Response.success(data={
|
||||
"result": data,
|
||||
"total": len(data),
|
||||
"page": 1,
|
||||
"pageSize": 9999
|
||||
})
|
||||
|
||||
13
api/i18n.py
13
api/i18n.py
@@ -274,11 +274,7 @@ async def get_i18n_list(request: Request,
|
||||
@Auth(["i18n:btn:infoList"])
|
||||
async def get_i18n_info_list(request: Request, id: str = Path(description="国际化内容语言ID")):
|
||||
if locale := await Locale.get_or_none(id=id, del_flag=1):
|
||||
result = await request.app.state.redis.get(f'{RedisKeyConfig.TRANSLATION_INFO.key}:{id}')
|
||||
if result:
|
||||
result = eval(result)
|
||||
return Response.success(data=result)
|
||||
data = await I18n.filter(locale_id=locale.id, del_flag=1).values(
|
||||
data = await I18n.filter(locale_id=locale.id, del_flag=1).order_by("key").values(
|
||||
id="id",
|
||||
key="key",
|
||||
translation="translation",
|
||||
@@ -292,13 +288,6 @@ async def get_i18n_info_list(request: Request, id: str = Path(description="国
|
||||
result = {}
|
||||
for i18n in data:
|
||||
result[f"{i18n['key']}"] = i18n["translation"]
|
||||
await request.app.state.redis.set(f'{RedisKeyConfig.TRANSLATION_INFO.key}:{id}',
|
||||
str(jsonable_encoder({
|
||||
"data": result,
|
||||
"locale": locale.code,
|
||||
"name": locale.name,
|
||||
})),
|
||||
ex=timedelta(minutes=60))
|
||||
return Response.success(data={
|
||||
"data": result,
|
||||
"locale": locale.code,
|
||||
|
||||
15
api/log.py
15
api/log.py
@@ -48,7 +48,6 @@ async def get_login_log(request: Request,
|
||||
f'{k}__contains': v for k, v in {
|
||||
'username': username,
|
||||
'nickname': nickname,
|
||||
'department_id': department_id,
|
||||
}.items() if v
|
||||
}
|
||||
if status is not None:
|
||||
@@ -59,7 +58,9 @@ async def get_login_log(request: Request,
|
||||
filterArgs['login_time__range'] = [startTime, endTime]
|
||||
if not department_id:
|
||||
filterArgs['user__department__id__in'] = sub_departments
|
||||
result = await LoginLog.filter(**filterArgs, del_flag=1).offset(
|
||||
else:
|
||||
filterArgs['user__department__id'] = department_id
|
||||
result = await LoginLog.filter(**filterArgs, user__del_flag=1, del_flag=1).offset(
|
||||
(page - 1) * pageSize).limit(pageSize).values(
|
||||
id="id",
|
||||
user_id="user__id",
|
||||
@@ -83,7 +84,7 @@ async def get_login_log(request: Request,
|
||||
if item["session_id"] == log["session_id"]:
|
||||
log["online"] = True
|
||||
return Response.success(data={
|
||||
"total": await LoginLog.filter(**filterArgs, del_flag=1, ).count(),
|
||||
"total": await LoginLog.filter(**filterArgs, del_flag=1, user__del_flag=1, ).count(),
|
||||
"result": result,
|
||||
"page": page,
|
||||
})
|
||||
@@ -176,7 +177,6 @@ async def get_operation_log(request: Request,
|
||||
'operation_type': type,
|
||||
'operator__username': username,
|
||||
'operator__nickname': nickname,
|
||||
'department_id': department_id,
|
||||
}.items() if v
|
||||
}
|
||||
if status is not None:
|
||||
@@ -187,7 +187,10 @@ async def get_operation_log(request: Request,
|
||||
filterArgs['operation_time__range'] = [startTime, endTime]
|
||||
if not department_id:
|
||||
filterArgs['department__id__in'] = sub_departments
|
||||
result = await OperationLog.filter(**filterArgs, del_flag=1).offset((page - 1) * pageSize).limit(
|
||||
else:
|
||||
filterArgs['department__id'] = department_id
|
||||
result = await OperationLog.filter(**filterArgs, operator__del_flag=1, del_flag=1).offset(
|
||||
(page - 1) * pageSize).limit(
|
||||
pageSize).values(
|
||||
id="id",
|
||||
operation_name="operation_name",
|
||||
@@ -211,7 +214,7 @@ async def get_operation_log(request: Request,
|
||||
cost_time="cost_time"
|
||||
)
|
||||
return Response.success(data={
|
||||
"total": await OperationLog.filter(**filterArgs, del_flag=1).count(),
|
||||
"total": await OperationLog.filter(**filterArgs, del_flag=1, operator__del_flag=1).count(),
|
||||
"result": result,
|
||||
"page": page,
|
||||
"pageSize": pageSize
|
||||
|
||||
20
api/login.py
20
api/login.py
@@ -18,7 +18,7 @@ from config.constant import BusinessType
|
||||
from config.constant import RedisKeyConfig
|
||||
from controller.login import CustomOAuth2PasswordRequestForm, LoginController
|
||||
from controller.query import QueryController
|
||||
from models import Department, User
|
||||
from models import Department, User, Role, UserRole
|
||||
from schemas.common import BaseResponse
|
||||
from schemas.login import LoginParams, GetUserInfoResponse, LoginResponse, GetCaptchaResponse, GetEmailCodeParams, \
|
||||
ResetPasswordParams
|
||||
@@ -94,7 +94,7 @@ async def login(
|
||||
async def register(request: Request, params: RegisterUserParams):
|
||||
register_enabled = (
|
||||
True
|
||||
if await request.app.state.redis.get(f'{RedisKeyConfig.SYSTEM_CONFIG.key}:register_enabled')
|
||||
if await request.app.state.redis.get(f'{RedisKeyConfig.SYSTEM_CONFIG.key}:account_register_enabled')
|
||||
== 'true'
|
||||
else False
|
||||
)
|
||||
@@ -106,7 +106,14 @@ async def register(request: Request, params: RegisterUserParams):
|
||||
if await QueryController.register_user_before(username=params.username, phone=params.phone, email=params.email):
|
||||
return Response.error(msg="注册失败,用户已存在!")
|
||||
params.password = await Password.get_password_hash(input_password=params.password)
|
||||
# 默认分配注册用户
|
||||
userRole = await Role.get_or_none(department__name="注册用户", code="user", del_flag=1).values(
|
||||
department_id="department__id", id="id")
|
||||
if not params.department_id:
|
||||
params.department_id = userRole.get("department_id", "")
|
||||
department = await Department.get_or_none(id=params.department_id)
|
||||
userRole = await Role.get_or_none(department__id=department.id, code="user", del_flag=1).values(id="id")
|
||||
print(userRole)
|
||||
user = await User.create(
|
||||
username=params.username,
|
||||
password=params.password,
|
||||
@@ -118,6 +125,11 @@ async def register(request: Request, params: RegisterUserParams):
|
||||
status=params.status,
|
||||
)
|
||||
if user:
|
||||
# 默认分配普通用户角色
|
||||
await UserRole.create(
|
||||
user_id=user.id,
|
||||
role_id=userRole.get("id", ""),
|
||||
)
|
||||
userParams = LoginParams(
|
||||
username=params.username,
|
||||
password=params.password
|
||||
@@ -140,7 +152,7 @@ async def register(request: Request, params: RegisterUserParams):
|
||||
result.pop("session_id")
|
||||
result.pop("userInfo")
|
||||
return Response.success(msg="注册成功!", data=result)
|
||||
return Response.error(msg="注册成功!")
|
||||
return Response.success(msg="注册成功!")
|
||||
else:
|
||||
return Response.error(msg="注册失败!")
|
||||
|
||||
@@ -221,7 +233,7 @@ async def info(
|
||||
|
||||
|
||||
@loginAPI.get("/getRoutes", response_class=JSONResponse, summary="获取路由信息")
|
||||
# @Log(title="获取路由信息", business_type=BusinessType.SELECT)
|
||||
@Log(title="获取路由信息", business_type=BusinessType.SELECT)
|
||||
async def get_routes(request: Request, current_user: dict = Depends(LoginController.get_current_user)):
|
||||
sub_departments = current_user.get("sub_departments")
|
||||
routes = await request.app.state.redis.get(f'{RedisKeyConfig.USER_ROUTES.key}:{current_user["id"]}')
|
||||
|
||||
@@ -31,7 +31,7 @@ roleAPI = APIRouter(
|
||||
@Auth(permission_list=["role:btn:add"])
|
||||
async def add_role(request: Request, params: AddRoleParams,
|
||||
current_user: dict = Depends(LoginController.get_current_user)):
|
||||
if await Role.get_or_none(code=params.role_code, department_id=params.department_id, del_flag=1):
|
||||
if await Role.get_or_none(code=params.code, department_id=params.department_id, del_flag=1):
|
||||
return Response.error(msg="角色编码已存在!")
|
||||
sub_departments = current_user.get("sub_departments")
|
||||
if params.department_id not in sub_departments:
|
||||
@@ -47,10 +47,10 @@ async def add_role(request: Request, params: AddRoleParams,
|
||||
)
|
||||
else:
|
||||
role = await Role.create(
|
||||
code=params.role_code,
|
||||
name=params.role_name,
|
||||
code=params.code,
|
||||
name=params.name,
|
||||
status=params.status,
|
||||
description=params.role_description,
|
||||
description=params.description,
|
||||
department_id=None,
|
||||
)
|
||||
if role:
|
||||
|
||||
14
api/user.py
14
api/user.py
@@ -20,7 +20,7 @@ from controller.login import LoginController
|
||||
from controller.query import QueryController
|
||||
from exceptions.exception import ModelValidatorException
|
||||
from models import File as FileModel
|
||||
from models import Role, Department
|
||||
from models import Role, Department, OperationLog, LoginLog
|
||||
from models.user import User, UserRole
|
||||
from schemas.common import BaseResponse, DeleteListParams
|
||||
from schemas.department import GetDepartmentListResponse
|
||||
@@ -76,6 +76,18 @@ async def delete_user(
|
||||
if user := await User.get_or_none(id=id, department__id__in=sub_departments, del_flag=1):
|
||||
user.del_flag = 0
|
||||
await user.save()
|
||||
# 移除用户角色
|
||||
await UserRole.filter(user_id=user.id, del_flag=1).update(del_flag=0)
|
||||
# 移除用户登录日志
|
||||
await LoginLog.filter(user_id=user.id, del_flag=1).update(del_flag=0)
|
||||
# 移除用户操作日志
|
||||
await OperationLog.filter(user_id=user.id, del_flag=1).update(del_flag=0)
|
||||
# 更新用户信息缓存
|
||||
if await request.app.state.redis.get(f'{RedisKeyConfig.USER_INFO.key}:{id}'):
|
||||
await request.app.state.redis.delete(f'{RedisKeyConfig.USER_INFO.key}:{id}')
|
||||
# 更新用户路由缓存
|
||||
if await request.app.state.redis.get(f'{RedisKeyConfig.USER_ROUTES.key}:{id}'):
|
||||
await request.app.state.redis.delete(f'{RedisKeyConfig.USER_ROUTES.key}:{id}')
|
||||
return Response.success(msg="删除成功!")
|
||||
else:
|
||||
return Response.error(msg="删除失败,用户不存在!")
|
||||
|
||||
Reference in New Issue
Block a user