mirror of
https://github.com/fastapi-practices/fastapi-best-architecture.git
synced 2026-09-21 21:15:13 +00:00
Simplify user permission database queries (#717)
This commit is contained in:
@@ -192,50 +192,6 @@ class CRUDUser(CRUDPlus[User]):
|
||||
**filters,
|
||||
)
|
||||
|
||||
async def get_super(self, db: AsyncSession, user_id: int) -> bool:
|
||||
"""
|
||||
获取用户是否为超级管理员
|
||||
|
||||
:param db: 数据库会话
|
||||
:param user_id: 用户 ID
|
||||
:return:
|
||||
"""
|
||||
user = await self.get(db, user_id)
|
||||
return user.is_superuser
|
||||
|
||||
async def get_staff(self, db: AsyncSession, user_id: int) -> bool:
|
||||
"""
|
||||
获取用户是否可以登录后台
|
||||
|
||||
:param db: 数据库会话
|
||||
:param user_id: 用户 ID
|
||||
:return:
|
||||
"""
|
||||
user = await self.get(db, user_id)
|
||||
return user.is_staff
|
||||
|
||||
async def get_status(self, db: AsyncSession, user_id: int) -> int:
|
||||
"""
|
||||
获取用户状态
|
||||
|
||||
:param db: 数据库会话
|
||||
:param user_id: 用户 ID
|
||||
:return:
|
||||
"""
|
||||
user = await self.get(db, user_id)
|
||||
return user.status
|
||||
|
||||
async def get_multi_login(self, db: AsyncSession, user_id: int) -> bool:
|
||||
"""
|
||||
获取用户是否允许多端登录
|
||||
|
||||
:param db: 数据库会话
|
||||
:param user_id: 用户 ID
|
||||
:return:
|
||||
"""
|
||||
user = await self.get(db, user_id)
|
||||
return user.is_multi_login
|
||||
|
||||
async def set_super(self, db: AsyncSession, user_id: int, is_super: bool) -> int:
|
||||
"""
|
||||
设置用户超级管理员状态
|
||||
|
||||
@@ -134,8 +134,7 @@ class UserService:
|
||||
raise errors.NotFoundError(msg='用户不存在')
|
||||
if pk == request.user.id:
|
||||
raise errors.ForbiddenError(msg='禁止修改自身权限')
|
||||
super_status = await user_dao.get_super(db, pk)
|
||||
count = await user_dao.set_super(db, pk, not super_status)
|
||||
count = await user_dao.set_super(db, pk, not user.status)
|
||||
await redis_client.delete(f'{settings.JWT_USER_REDIS_PREFIX}:{user.id}')
|
||||
return count
|
||||
|
||||
@@ -155,8 +154,7 @@ class UserService:
|
||||
raise errors.NotFoundError(msg='用户不存在')
|
||||
if pk == request.user.id:
|
||||
raise errors.ForbiddenError(msg='禁止修改自身权限')
|
||||
staff_status = await user_dao.get_staff(db, pk)
|
||||
count = await user_dao.set_staff(db, pk, not staff_status)
|
||||
count = await user_dao.set_staff(db, pk, not user.is_staff)
|
||||
await redis_client.delete(f'{settings.JWT_USER_REDIS_PREFIX}:{user.id}')
|
||||
return count
|
||||
|
||||
@@ -176,8 +174,7 @@ class UserService:
|
||||
raise errors.NotFoundError(msg='用户不存在')
|
||||
if pk == request.user.id:
|
||||
raise errors.ForbiddenError(msg='禁止修改自身权限')
|
||||
status = await user_dao.get_status(db, pk)
|
||||
count = await user_dao.set_status(db, pk, 0 if status == 1 else 1)
|
||||
count = await user_dao.set_status(db, pk, 0 if user.status == 1 else 1)
|
||||
await redis_client.delete(f'{settings.JWT_USER_REDIS_PREFIX}:{user.id}')
|
||||
return count
|
||||
|
||||
@@ -195,7 +192,7 @@ class UserService:
|
||||
user = await user_dao.get(db, pk)
|
||||
if not user:
|
||||
raise errors.NotFoundError(msg='用户不存在')
|
||||
multi_login = await user_dao.get_multi_login(db, pk) if pk != user.id else request.user.is_multi_login
|
||||
multi_login = user.is_multi_login if pk != user.id else request.user.is_multi_login
|
||||
new_multi_login = not multi_login
|
||||
count = await user_dao.set_multi_login(db, pk, new_multi_login)
|
||||
await redis_client.delete(f'{settings.JWT_USER_REDIS_PREFIX}:{user.id}')
|
||||
|
||||
Reference in New Issue
Block a user