私のコードのパーミッションはオブジェクトとオブジェクトのリストとは異なります。django restフレームワーク内のオブジェクトとオブジェクトのリストを分離するためのパーミッションの適用との違い
のは、我々はUser
の一つのモデルを持っているとしましょう:
class User(auth.AbstractBaseUser, auth.PermissionsMixin):
name = models.CharField(max_length=255, blank=True, null=True)
profile_status = models.CharField(max_length=255, blank=True, null=True)
とデシベルで二列:
1. name = "Dennis", profile_status = "private" # (not "public")
2. name = "Robert", profile_status = "private" # (not "public")
とビューセット:
class UsersViewSet(viewsets.CreateListRetrieveUpdateViewSet):
queryset = models.User.objects.all() # doesn't matter...
serializer_class = serializers.UserSerializer # doesn't matter...
filter_class = filters.UsersFilterSet # doesn't matter...
permission_classes = [IsProfileAccessStatus('public'),
IsReadOnly]
IsProfileAccessStatus('public')
Djangoの許可がTrue
場合を返します。オブジェクトのprofile_status
は 'p ublic ':
def IsProfileAccessStatus(access_status=''):
class IsProfileStatusOf(BasePermission):
def has_object_permission(self, request, view, obj):
return hasattr(obj, 'profile_status') and \
obj.profile_status== access_status
return IsProfileStatusOf
バックエンドが/api/users/
とspeicific /api/users/:name/
に1つのユーザーを返します。 /api/users/Dennis/
DRFで
異なる出力
はIsProfileAccessStatus('public')
権限記載例外を返します。だから大丈夫です。
しかし/api/users/
のために、それは両方のオブジェクトを返します。
[
{ "name": "Dennis", "profile_status": "private" },
{ "name": "Robert", "profile_status": "private" }
]
Djangoの権限がこのように使われるのはなぜそこで質問がありますか?なぜすべてのインスタンスにdrf権限が適用されないのですか?
ありがとうございました!
感謝を使用することはおそらくです!あなたの答えは本当に理にかなっています。 –