Рефакторинг: убрана зависимость от Django Groups/Permissions для CustomUser
- CustomUser теперь наследуется от AbstractBaseUser (вместо AbstractUser) - Удалены поля groups и user_permissions из CustomUser - Все authentication backends (TenantUserBackend, PlatformAdminBackend, RoleBasedPermissionBackend) больше НЕ наследуются от ModelBackend - Добавлены методы has_perm() и has_module_perms() в CustomUser для делегирования проверки прав кастомным backends - Полная изоляция: CustomUser использует только систему ролей (UserRole), PlatformAdmin использует только is_superuser - Удалён весь старый код, связанный с Django permissions - Нет обратной совместимости (не требуется) - Чистая архитектура для multi-tenant приложения
This commit is contained in:
@@ -4,15 +4,18 @@ Authentication backend для PlatformAdmin.
|
||||
|
||||
Этот backend используется для аутентификации администраторов платформы.
|
||||
Работает на public домене, а также на tenant доменах для суперадминов.
|
||||
|
||||
ВАЖНО: НЕ наследуется от ModelBackend! Полностью независимая реализация.
|
||||
"""
|
||||
from django.contrib.auth.backends import ModelBackend
|
||||
from django.db import connection
|
||||
|
||||
|
||||
class PlatformAdminBackend(ModelBackend):
|
||||
class PlatformAdminBackend:
|
||||
"""
|
||||
Backend аутентификации для PlatformAdmin.
|
||||
|
||||
НЕ наследуется от ModelBackend! Полностью независимая реализация.
|
||||
|
||||
Особенности:
|
||||
- На public домене: аутентифицирует любого PlatformAdmin
|
||||
- На tenant домене: аутентифицирует только PlatformAdmin с is_superuser=True
|
||||
@@ -79,3 +82,40 @@ class PlatformAdminBackend(ModelBackend):
|
||||
"""
|
||||
is_active = getattr(user, 'is_active', None)
|
||||
return is_active or is_active is None
|
||||
|
||||
def has_perm(self, user_obj, perm, obj=None):
|
||||
"""
|
||||
Проверка permissions для PlatformAdmin.
|
||||
|
||||
ВАЖНО: Этот backend работает ТОЛЬКО с PlatformAdmin!
|
||||
Для CustomUser возвращает None (пропускает проверку).
|
||||
|
||||
Для PlatformAdmin проверяем только is_superuser (без groups/permissions).
|
||||
"""
|
||||
from platform_admin.models import PlatformAdmin
|
||||
|
||||
# Проверяем только PlatformAdmin, CustomUser пропускаем
|
||||
if not isinstance(user_obj, PlatformAdmin):
|
||||
return None
|
||||
|
||||
# Только суперпользователь имеет права
|
||||
# (не используем groups/permissions из Django, т.к. AUTH_USER_MODEL != реальная модель)
|
||||
return user_obj.is_active and user_obj.is_superuser
|
||||
|
||||
def has_module_perms(self, user_obj, app_label):
|
||||
"""
|
||||
Проверка module permissions для PlatformAdmin.
|
||||
|
||||
ВАЖНО: Этот backend работает ТОЛЬКО с PlatformAdmin!
|
||||
Для CustomUser возвращает None (пропускает проверку).
|
||||
|
||||
Для PlatformAdmin проверяем только is_superuser (без groups/permissions).
|
||||
"""
|
||||
from platform_admin.models import PlatformAdmin
|
||||
|
||||
# Проверяем только PlatformAdmin, CustomUser пропускаем
|
||||
if not isinstance(user_obj, PlatformAdmin):
|
||||
return None
|
||||
|
||||
# Только суперпользователь имеет права
|
||||
return user_obj.is_active and user_obj.is_superuser
|
||||
|
||||
Reference in New Issue
Block a user