私はdjangorestframework
で遊んでいます。私の目標はGET
リクエストに反応するビューにDjangoModelPermissions
を使用することです。公式ドキュメントには次のように書かれています。Django Rest FrameworkはListAPIViewでDjangoModelPermissionsを使用します
デフォルトの動作は、カスタムモデル のアクセス許可をサポートするようにオーバーライドすることもできます。たとえば、
GET
リクエストにview
の許可を含めることができます。
だから私は、次のように私のモデルを修正:
class User(AbstractUser):
display_name = models.CharField(_('Display Name'), blank=True, max_length=255)
class Meta:
permissions = (
("view_user", "Can view users"),
)
def __str__(self):
return self.username
とビュー:
class UserListAPIView(ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = (permissions.DjangoModelPermissions,)
セッティング:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissions'
]
}
問題は、私が実装したUserListAPIView
は、Group
に属していないユーザーにすべてのオブジェクトのリストを正常に返します。いずれもカスタムUser Permission
を持っていません。 DjangoModelPermissions
は効果がありません。
class CustomDjangoModelPermission(permissions.DjangoModelPermissions):
def __init__(self):
self.perms_map['GET'] = ['%(app_label)s.view_%(model_name)s']
ああ、私は自分でそれを実装する必要があると思う:https://github.com/encode/django-rest-framework/blob/master/rest_framework/permissions.py#L91ここで何か助けていただければ幸いです。 –