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