我使用Django 2.0和Django RESET Framework为我的应用程序编写REST API。
我已经配置了以下身份验证方法
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
}到目前为止,它允许所有经过身份验证的用户访问web api视图。
我想要的是允许很少的用户(可能是超级管理员用户)能够通过登录从会话身份验证或从web浏览器访问API。
编辑2:联系人/views.py
class ContactViewSet(viewsets.ModelViewSet):
queryset = Contact.objects.all()
serializer_class = ContactSerializer
permission_classes = (IsAuthenticated,)
def perform_create(self, serializer):
serializer.save(user_id=self.request.user)发布于 2018-05-14 15:26:32
所以你可以利用permission_classes来做这件事。DRF的Request对象记住在名为_authenticator的属性中使用的身份验证方法。您可以使用此方法,并使用permission_classes来确定对(用户,身份验证器)是否具有权限。
class AdminAuthenticationPermission(permissions.BasePermission):
ADMIN_ONLY_AUTH_CLASSES = [rest_framework.authentication.BasicAuthentication, rest_framework.authentication.SessionAuthentication]
def has_permission(self, request, view):
user = request.user
if user and user.is_authenticated():
return user.is_superuser or \
not any(isinstance(request._authenticator, x) for x in self.ADMIN_ONLY_AUTH_CLASSES)
return False
class ContactViewSet(viewsets.ModelViewSet):
queryset = Contact.objects.all()
serializer_class = ContactSerializer
permission_classes = (IsAuthenticated, AdminAuthenticationPermission,)未经测试:但应该有效
发布于 2019-05-28 09:03:55
为Django 2(添加于views.py)
from rest_framework.permissions import IsAdminUser
class IsSuperUser(IsAdminUser):
def has_permission(self, request, view):
return bool(request.user and request.user.is_superuser)
class ListSmth(ListCreateAPIView):
permission_classes = (IsSuperUser,)
... Your code...发布于 2021-01-07 08:03:31
已有名为IsAdminUser的内置类,请将其指定为permission_classes属性的值。
from rest_framework.permissions import IsAdminUser
class A:
permission_classes = (IsAdminUser,)这将检查值。
reques.user.isStaff == Truehttps://stackoverflow.com/questions/50333330
复制相似问题