auth and rbac improves
This commit is contained in:
@@ -26,6 +26,8 @@ from orm.community import (
|
||||
Community,
|
||||
CommunityAuthor,
|
||||
CommunityFollower,
|
||||
)
|
||||
from rbac.api import (
|
||||
assign_role_to_user,
|
||||
get_user_roles_in_community,
|
||||
)
|
||||
@@ -639,31 +641,42 @@ class AuthService:
|
||||
logger.error(f"Ошибка отмены смены email: {e}")
|
||||
return {"success": False, "error": str(e), "author": None}
|
||||
|
||||
async def ensure_user_has_reader_role(self, user_id: int) -> bool:
|
||||
async def ensure_user_has_reader_role(self, user_id: int, session=None) -> bool:
|
||||
"""
|
||||
Убеждается, что у пользователя есть роль 'reader'.
|
||||
Если её нет - добавляет автоматически.
|
||||
|
||||
Args:
|
||||
user_id: ID пользователя
|
||||
session: Сессия БД (опционально)
|
||||
|
||||
Returns:
|
||||
True если роль была добавлена или уже существует
|
||||
"""
|
||||
try:
|
||||
logger.debug(f"[ensure_user_has_reader_role] Проверяем роли для пользователя {user_id}")
|
||||
|
||||
existing_roles = get_user_roles_in_community(user_id, community_id=1)
|
||||
# Используем переданную сессию или создаем новую
|
||||
existing_roles = get_user_roles_in_community(user_id, community_id=1, session=session)
|
||||
logger.debug(f"[ensure_user_has_reader_role] Существующие роли: {existing_roles}")
|
||||
|
||||
if "reader" not in existing_roles:
|
||||
logger.warning(f"У пользователя {user_id} нет роли 'reader'. Добавляем автоматически.")
|
||||
success = assign_role_to_user(user_id, "reader", community_id=1)
|
||||
if success:
|
||||
logger.info(f"Роль 'reader' добавлена пользователю {user_id}")
|
||||
return True
|
||||
logger.error(f"Не удалось добавить роль 'reader' пользователю {user_id}")
|
||||
if "reader" not in existing_roles:
|
||||
logger.warning(f"У пользователя {user_id} нет роли 'reader'. Добавляем автоматически.")
|
||||
success = assign_role_to_user(user_id, "reader", community_id=1, session=session)
|
||||
logger.debug(f"[ensure_user_has_reader_role] Результат assign_role_to_user: {success}")
|
||||
if success:
|
||||
logger.info(f"Роль 'reader' добавлена пользователю {user_id}")
|
||||
return True
|
||||
logger.error(f"Не удалось добавить роль 'reader' пользователю {user_id}")
|
||||
return False
|
||||
|
||||
logger.debug(f"[ensure_user_has_reader_role] Роль 'reader' уже есть у пользователя {user_id}")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при проверке/добавлении роли reader для пользователя {user_id}: {e}")
|
||||
# В случае ошибки возвращаем False, чтобы тест мог обработать это
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
async def fix_all_users_reader_role(self) -> dict[str, int]:
|
||||
"""
|
||||
Проверяет всех пользователей и добавляет роль 'reader' тем, у кого её нет.
|
||||
|
||||
Reference in New Issue
Block a user