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

Jav*_*ake 2 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
Run Code Online (Sandbox Code Playgroud)

在仍然遵循Django-REST-Framework API的情况下,是否可以通过这种方式进行操作?

Nic*_*tot 5

您正在寻找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
Run Code Online (Sandbox Code Playgroud)

您也可以看一下DjangoModelPermissions广告。

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

# in settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'myapp.permissions.IsAdminOrReadOnly',
    )
}
Run Code Online (Sandbox Code Playgroud)

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