from rest_framework.permissions import BasePermission
from rest_framework.permissions import SAFE_METHODS


class IsStaffOrReadOnly(BasePermission):
    """
    The request is authenticated as a staff, or is a read-only request.
    """

    def has_permission(self, request, view):
        return request.method in SAFE_METHODS or request.user and request.user.is_staff


class IsAuthenticatedOrReadOnly(BasePermission):
    """
    The request is authenticated as a user, or is a read-only request.
    """

    def has_permission(self, request, view):
        return request.method in SAFE_METHODS or request.user and request.user.is_authenticated


class IsStaffOrReadOnlyForAuthenticated(BasePermission):

    """
    The request is authenticated as a staff, or is a read-only request for authenticated.
    """
    def has_permission(self, request, view):
        return request.user.is_staff or request.method in SAFE_METHODS and request.user.is_authenticated


class IsStaffUser(BasePermission):

    """
    The request is authenticated as a staff
    """

    def has_permission(self, request, view):
        return request.user.is_staff