from django.contrib.auth import get_user_model from rest_framework.permissions import BasePermission User = get_user_model() class IsAdmin(BasePermission): def has_permission(self, request, view): return request.user.is_authenticated and ( request.user.role == User.ADMIN_ROLE or request.user.is_staff or request.user.is_superuser ) class IsTeacherOrAdmin(BasePermission): def has_permission(self, request, view): return request.user.is_authenticated and ( request.user.role in [ User.TEACHER_ROLE, User.ADMIN_ROLE ] or request.user.is_staff or request.user.is_superuser ) class IsAdminOrIsSelf(BasePermission): def has_object_permission(self, request, view, user): return request.user.is_authenticated and ( user == request.user or request.user.is_staff or request.user.is_superuser ) class IsAuthorOrAdmin(BasePermission): def has_permission(self, request, view): return request.user.is_authenticated and ( request.user.role in [ User.AUTHOR_ROLE, User.ADMIN_ROLE ] or request.user.is_staff or request.user.is_superuser ) class IsAuthorObjectOrAdmin(BasePermission): def has_object_permission(self, request, view, obj): return request.user.is_authenticated and ( request.user.role == User.ADMIN_ROLE or request.user.is_staff or request.user.is_superuser ) and request.user == obj.author