22# -*- coding: utf-8 -*-
33import random
44
5+ from typing import Sequence
6+
57from fastapi import Request
68from sqlalchemy import Select
79
810from backend .app .admin .crud .crud_dept import dept_dao
911from backend .app .admin .crud .crud_role import role_dao
1012from backend .app .admin .crud .crud_user import user_dao
11- from backend .app .admin .model import User
13+ from backend .app .admin .model import Role , User
1214from backend .app .admin .schema .user import (
1315 AddUserParam ,
1416 RegisterUserParam ,
@@ -81,28 +83,28 @@ async def add(*, request: Request, obj: AddUserParam) -> None:
8183 await user_dao .add (db , obj )
8284
8385 @staticmethod
84- async def pwd_reset (* , request : Request , obj : ResetPasswordParam ) -> int :
86+ async def pwd_reset (* , username : str , obj : ResetPasswordParam ) -> int :
8587 """
8688 重置用户密码
8789
88- :param request: FastAPI 请求对象
90+ :param username: 用户名
8991 :param obj: 密码重置参数
9092 :return:
9193 """
9294 async with async_db_session .begin () as db :
93- user = await user_dao .get (db , request . user . id )
95+ user = await user_dao .get_by_username (db , username )
9496 if not user :
9597 raise errors .NotFoundError (msg = '用户不存在' )
9698 if not password_verify (obj .old_password , user .password ):
9799 raise errors .ForbiddenError (msg = '原密码错误' )
98100 if obj .new_password != obj .confirm_password :
99101 raise errors .ForbiddenError (msg = '密码输入不一致' )
100102 new_pwd = get_hash_password (obj .new_password , user .salt )
101- count = await user_dao .reset_password (db , request . user .id , new_pwd )
103+ count = await user_dao .reset_password (db , user .id , new_pwd )
102104 key_prefix = [
103- f'{ settings .TOKEN_REDIS_PREFIX } :{ request . user .id } ' ,
104- f'{ settings .TOKEN_REFRESH_REDIS_PREFIX } :{ request . user .id } ' ,
105- f'{ settings .JWT_USER_REDIS_PREFIX } :{ request . user .id } ' ,
105+ f'{ settings .TOKEN_REDIS_PREFIX } :{ user .id } ' ,
106+ f'{ settings .TOKEN_REFRESH_REDIS_PREFIX } :{ user .id } ' ,
107+ f'{ settings .JWT_USER_REDIS_PREFIX } :{ user .id } ' ,
106108 ]
107109 for prefix in key_prefix :
108110 await redis_client .delete_prefix (prefix )
@@ -122,6 +124,33 @@ async def get_userinfo(*, username: str) -> User:
122124 raise errors .NotFoundError (msg = '用户不存在' )
123125 return user
124126
127+ @staticmethod
128+ async def get_roles (* , username : str ) -> Sequence [Role ]:
129+ """
130+ 获取用户所有角色
131+
132+ :param username: 用户名
133+ :return:
134+ """
135+ async with async_db_session () as db :
136+ user = await user_dao .get_with_relation (db , username = username )
137+ if not user :
138+ raise errors .NotFoundError (msg = '用户不存在' )
139+ return user .roles
140+
141+ @staticmethod
142+ async def get_select (* , dept : int , username : str , phone : str , status : int ) -> Select :
143+ """
144+ 获取用户列表查询条件
145+
146+ :param dept: 部门 ID
147+ :param username: 用户名
148+ :param phone: 手机号
149+ :param status: 状态
150+ :return:
151+ """
152+ return await user_dao .get_list (dept = dept , username = username , phone = phone , status = status )
153+
125154 @staticmethod
126155 async def update (* , request : Request , username : str , obj : UpdateUserParam ) -> int :
127156 """
@@ -158,19 +187,6 @@ async def update(*, request: Request, username: str, obj: UpdateUserParam) -> in
158187 await redis_client .delete (f'{ settings .JWT_USER_REDIS_PREFIX } :{ user .id } ' )
159188 return count
160189
161- @staticmethod
162- async def get_select (* , dept : int , username : str , phone : str , status : int ) -> Select :
163- """
164- 获取用户列表查询条件
165-
166- :param dept: 部门 ID
167- :param username: 用户名
168- :param phone: 手机号
169- :param status: 状态
170- :return:
171- """
172- return await user_dao .get_list (dept = dept , username = username , phone = phone , status = status )
173-
174190 @staticmethod
175191 async def update_permission (* , request : Request , pk : int ) -> int :
176192 """
0 commit comments