我目前正在构建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的情况下,是否可以通过这种方式进行操作?
您正在寻找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', ) }
或根据需要在每个视图上。