我目前正在构建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?
答案 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
...
希望它能为你提供帮助