How to add custom permission in viewset

ⅰ亾dé卋堺 提交于 2020-01-13 19:16:09

问题


How to add custom permission in viewset in django rest framework other than the default permission while creating a module? I have a permission "fix_an_appointment". In the below viewset, how to include this permission? Those who have this permission has only able to create.

My views.py file:

class settingsViewSet(viewsets.ModelViewSet):
    serializer_class = SettingsSerializer
    queryset = Setting.objects.all()

Can anyone help?


回答1:


simply create a custom permission class

class FixAnAppointmentPermssion(permissions.BasePermission):
    def has_permission(self, request, view):
        return True or False

then the in your view set class use your custom permission

class settingsViewSet(viewsets.ModelViewSet):
    serializer_class = SettingsSerializer
    queryset = Setting.objects.all()
    permission_classes = (FixAnAppointmentPermssion,)



回答2:


by docs custom-permissions, list of view actions actions my_permissions.py

from rest_framework import permissions

class FixPermission(permissions.BasePermission):
    """
    fix_an_appointment
    """

    def has_permission(self, request, view):
        if request.user.is_authenticated :
            if view.action == 'retrieve':
                return request.user.has_perms('fix_list_perm')
            if view.action == 'retrieve':
                return request.user.has_perms('fix_an_appointment')
        return False

in views.py

from my_permissions import FixPermission


class settingsViewSet(viewsets.ModelViewSet):
    serializer_class = SettingsSerializer
    queryset = Setting.objects.all()
    permission_classes = (FixPermission,)



回答3:


We can set permission for each functions like create, retrive, update, delete(add,edit,delete and update)

from my_permissions import FixPermission

class FixAnAppointmentPermssion(permissions.BasePermission):
    def has_permission(self, request, view):
       return True or False

class YourViewSet(viewsets.ModelViewSet):
serializer_class = SettingsSerializer
queryset = Your.objects.all()

@permission_classes(FixAnAppointmentPermssion,)
def create(request, format=None):
  content = {
           'status': 'request was permitted'
  }
return Response(content)

@permission_classes(FixAnAppointmentPermssion,)
def retrive(request, format=None):
  content = {
           'status': 'request was permitted'
  }
return Response(content)


来源:https://stackoverflow.com/questions/45793581/how-to-add-custom-permission-in-viewset

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!