          for permitter_cls in self.permitters:
              permitter = permission_cls(self)
              permitter.permit(auth)
  
      def _authenticate(self):
          for authenticator_cls in self.authenticators:
              authenticator = authenticator_cls(self)
              auth = authenticator.authenticate(self.request)
              if auth:
                  return auth
          return None
 
</s> remove         auth = self.auth
        for permitter_cls in self.permitters:
            permitter = permission_cls(self)
            permitter.permit(auth)
 </s> add         for permission_cls in self.permissions:
            permission = permission_cls(self)
            if not permission.has_permission(self.auth):
                raise ErrorResponse(status.HTTP_403_FORBIDDEN,
                                   {'detail': 'You do not have permission to access this resource. ' +
                                    'You may need to login or otherwise authenticate the request.'})                
 </s> remove         self.mixin = mixin
 </s> add         self.view = view </s> remove             # Temporarily request.POST with .RAW_CONTENT, so that we use our more generic request parsing
            request._post = self.mixin.RAW_CONTENT
 </s> add             # Temporarily set request.POST to view.RAW_CONTENT,
            # so that we use our more generic request parsing,
            # in preference to Django's form-only request parsing.
            request._post = self.view.RAW_CONTENT </s> remove     def __init__(self, mixin):
 </s> add     def __init__(self, view):
          for permitter_cls in self.permitters:
              permitter = permission_cls(self)
              permitter.permit(auth)
  







keep keep keep keep replace replace replace replace replace replace replace
 Generic permissions added, allowed_methods and anon_allowed_methods now defunct, dispatch now mirrors View.dispatch more nicely 
djangorestframework/mixins.py