auth and rbac improves

This commit is contained in:
2025-08-20 18:33:58 +03:00
parent fe76eef273
commit fb45178396
10 changed files with 426 additions and 225 deletions

View File

@@ -13,7 +13,7 @@ from functools import wraps
from typing import Any, Callable
from orm.author import Author
from rbac.interface import get_community_queries, get_rbac_operations
from rbac.interface import get_rbac_operations
from settings import ADMIN_EMAILS
from storage.db import local_session
from utils.logger import root_logger as logger
@@ -100,8 +100,61 @@ def get_user_roles_in_community(author_id: int, community_id: int = 1, session:
"""
Получает роли пользователя в сообществе через новую систему CommunityAuthor
"""
community_queries = get_community_queries()
return community_queries.get_user_roles_in_community(author_id, community_id, session)
rbac_ops = get_rbac_operations()
return rbac_ops.get_user_roles_in_community(author_id, community_id, session)
def assign_role_to_user(author_id: int, role: str, community_id: int = 1, session: Any = None) -> bool:
"""
Назначает роль пользователю в сообществе
Args:
author_id: ID автора
role: Название роли
community_id: ID сообщества
session: Сессия БД (опционально)
Returns:
True если роль была добавлена, False если уже была
"""
rbac_ops = get_rbac_operations()
return rbac_ops.assign_role_to_user(author_id, role, community_id, session)
def remove_role_from_user(author_id: int, role: str, community_id: int = 1, session: Any = None) -> bool:
"""
Удаляет роль у пользователя в сообществе
Args:
author_id: ID автора
role: Название роли
community_id: ID сообщества
session: Сессия БД (опционально)
Returns:
True если роль была удалена, False если её не было
"""
rbac_ops = get_rbac_operations()
return rbac_ops.remove_role_from_user(author_id, role, community_id, session)
async def check_user_permission_in_community(
author_id: int, permission: str, community_id: int = 1, session: Any = None
) -> bool:
"""
Проверяет разрешение пользователя в сообществе
Args:
author_id: ID автора
permission: Разрешение для проверки
community_id: ID сообщества
session: Сессия БД (опционально)
Returns:
True если разрешение есть, False если нет
"""
rbac_ops = get_rbac_operations()
return await rbac_ops.user_has_permission(author_id, permission, community_id, session)
async def user_has_permission(author_id: int, permission: str, community_id: int, session: Any = None) -> bool: