mirror of
https://github.com/fastapi-practices/fastapi-best-architecture.git
synced 2026-09-21 21:15:13 +00:00
Fix the logic related to the status field (#1125)
This commit is contained in:
@@ -25,6 +25,7 @@ from backend.app.admin.schema.user import (
|
||||
UpdateUserParam,
|
||||
)
|
||||
from backend.app.admin.utils.password_security import get_hash_password
|
||||
from backend.common.enums import StatusType
|
||||
from backend.common.exception import errors
|
||||
from backend.plugin.core import check_plugin_installed
|
||||
from backend.utils.serializers import select_join_serialize
|
||||
@@ -146,9 +147,11 @@ class CRUDUser(CRUDPlus[User]):
|
||||
db.add(new_user)
|
||||
await db.flush()
|
||||
|
||||
role_stmt = select(Role)
|
||||
role_stmt = select(Role).where(Role.status == StatusType.enable)
|
||||
result = await db.execute(role_stmt)
|
||||
role = result.scalars().first() # 默认绑定第一个角色
|
||||
if role is None:
|
||||
raise errors.NotFoundError(msg='未找到可用角色,请联系系统管理员')
|
||||
|
||||
user_role_stmt = insert(user_role).values(AddUserRoleParam(user_id=new_user.id, role_id=role.id).model_dump())
|
||||
await db.execute(user_role_stmt)
|
||||
|
||||
@@ -12,7 +12,7 @@ from backend.app.admin.service.login_log_service import login_log_service
|
||||
from backend.app.admin.service.user_password_history_service import password_security_service
|
||||
from backend.app.admin.utils.password_security import password_verify
|
||||
from backend.common.context import ctx
|
||||
from backend.common.enums import LoginLogStatusType
|
||||
from backend.common.enums import LoginLogStatusType, StatusType
|
||||
from backend.common.exception import errors
|
||||
from backend.common.i18n import t
|
||||
from backend.common.log import log
|
||||
@@ -186,14 +186,14 @@ class AuthService:
|
||||
if request.user.is_superuser:
|
||||
menus = await menu_dao.get_all(db, None, None)
|
||||
for menu in menus:
|
||||
if menu.perms:
|
||||
if menu.status == StatusType.enable and menu.perms:
|
||||
codes.update(menu.perms.split(','))
|
||||
else:
|
||||
roles = request.user.roles
|
||||
roles = [role for role in request.user.roles if role.status == StatusType.enable]
|
||||
if roles:
|
||||
for role in roles:
|
||||
for menu in role.menus:
|
||||
if menu.perms:
|
||||
if menu.status == StatusType.enable and menu.perms:
|
||||
codes.update(menu.perms.split(','))
|
||||
|
||||
return list(codes)
|
||||
|
||||
@@ -7,6 +7,7 @@ from backend.app.admin.crud.crud_menu import menu_dao
|
||||
from backend.app.admin.model import Menu
|
||||
from backend.app.admin.schema.menu import CreateMenuParam, UpdateMenuParam
|
||||
from backend.app.admin.utils.cache import user_cache_manager
|
||||
from backend.common.enums import StatusType
|
||||
from backend.common.exception import errors
|
||||
from backend.utils.build_tree import get_tree_data, get_vben5_tree_data
|
||||
|
||||
@@ -57,7 +58,7 @@ class MenuService:
|
||||
if request.user.is_superuser:
|
||||
menu_data = await menu_dao.get_sidebar(db, None)
|
||||
else:
|
||||
roles = request.user.roles
|
||||
roles = [role for role in request.user.roles if role.status == StatusType.enable]
|
||||
menu_ids = set()
|
||||
if roles:
|
||||
for role in roles:
|
||||
|
||||
@@ -85,8 +85,9 @@ def filter_data_permission( # noqa: C901
|
||||
if scope.status:
|
||||
data_rules.update(rule for rule in scope.rules if rule is not None)
|
||||
|
||||
# 启用数据权限过滤,但没有已启用的数据权限
|
||||
if not data_rules:
|
||||
return or_(1 == 1)
|
||||
return or_(1 != 1)
|
||||
|
||||
# 目标模型
|
||||
target_model_map = (
|
||||
|
||||
@@ -4,6 +4,7 @@ from sqlalchemy import Select, and_
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy_crud_plus import CRUDPlus
|
||||
|
||||
from backend.common.enums import StatusType
|
||||
from backend.plugin.dict.model import DictData
|
||||
from backend.plugin.dict.schema.dict_data import CreateDictDataParam, UpdateDictDataParam
|
||||
|
||||
@@ -34,6 +35,7 @@ class CRUDDictData(CRUDPlus[DictData]):
|
||||
sort_columns='sort',
|
||||
sort_orders='desc',
|
||||
type_code=type_code,
|
||||
status=StatusType.enable,
|
||||
)
|
||||
|
||||
async def get_all(self, db: AsyncSession) -> Sequence[DictData]:
|
||||
|
||||
Reference in New Issue
Block a user