如何为组和管理员授予权限

时间:2013-12-26 14:33:13

标签: django django-rest-framework

我目前正在构建API,但我无法确定允许组成员使用某些方法的最简单方法以及例如。管理员(甚至是另一个团体)。

基本上我希望允许群组成员访问除POST之外的所有方法,而管理员(或其他群组)则具有完全访问权限。

伪:

def get(self, request):
     if (user.is_superuser | Group.objects.get(name='APIUsers').user_set.filter(id=user.id).exists()):
     # Do something usefull

这种方式是否可行,同时仍然遵守Django-REST-Framework API?

2 个答案:

答案 0 :(得分:4)

您正在寻找Django REST Framework的Custom Permissions。您还可以查看IsAdminUser IsAuthenticatedOrReadOnly获取灵感。

例如,您可以使用:

from rest_framework import permissions

class IsAdminOrReadOnly(permissions.BasePermission):
    """Allow unsafe methods for admin users only."""

    def has_permission(self, request, view):
        if not request.user or not request.user.is_authenticated():
            return False
        if request.user.is_superuser:
            return True
        if request.method in permissions.SAFE_METHODS:
            return bool(Group.objects.get(name='Patient').
                        user_set.filter(id=request.user.id).exists())
        return False

您还可以查看广告DjangoModelPermissions

然后,只需在整个API上使用新权限:

# in settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'myapp.permissions.IsAdminOrReadOnly',
    )
}

或根据需要在每个视图上。

答案 1 :(得分:0)

对于名为api_users的群组中的用户,您有:

class IsApiUser(BasePermission):
    #Allows access only to api_users group members.
    def has_permission(self, request, view):
        if request.user and request.user.groups.filter(name='api_users'):
            return True
        return False

下一个

class custListView(RetrieveAPIView):
    permission_classes = (IsApiUser,)
    serializer_class = custSerializer
    ...

希望它能为你提供帮助