重构前保存现有 apps/ 结构基线,供后续各阶段回滚。 Co-Authored-By: Claude <noreply@anthropic.com>
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
from apps.models.user_role import UserRole
|
|
from apps.models.role import Role
|
|
from extensions import get_db_session
|
|
|
|
|
|
# 根据用户ID查询角色列表
|
|
|
|
def get_user_role_list(userId):
|
|
db = get_db_session()
|
|
rows = (
|
|
db.query(Role.id, Role.name)
|
|
.join(UserRole, UserRole.role_id == Role.id)
|
|
.filter(UserRole.user_id == userId, Role.is_delete == 0)
|
|
.all()
|
|
)
|
|
role_list = []
|
|
if rows:
|
|
for v in rows:
|
|
item = {
|
|
'id': v.id,
|
|
'name': v.name,
|
|
}
|
|
role_list.append(item)
|
|
return role_list
|
|
|
|
|
|
# 根据用户ID列表批量查询角色,返回 {user_id: [{id, name}, ...]} 字典
|
|
|
|
def get_user_role_map(user_ids):
|
|
if not user_ids:
|
|
return {}
|
|
db = get_db_session()
|
|
# 用ORM查询替代原生SQL,避免tuple单元素/空列表的IN语法问题
|
|
from apps.models.user_role import UserRole
|
|
from apps.models.role import Role
|
|
rows = (
|
|
db.query(UserRole.user_id, Role.id.label('role_id'), Role.name.label('role_name'))
|
|
.join(Role, Role.id == UserRole.role_id)
|
|
.filter(UserRole.user_id.in_(user_ids), Role.is_delete == 0)
|
|
.all()
|
|
)
|
|
role_map = {}
|
|
for row in rows:
|
|
uid = row.user_id
|
|
if uid not in role_map:
|
|
role_map[uid] = []
|
|
role_map[uid].append({'id': row.role_id, 'name': row.role_name})
|
|
return role_map
|