Django REST框架中的自定义列表权限

3

我正在尝试解决如何处理自定义列表权限的问题。

我最好通过示例来解释,因此我编写了这个场景来解释我的问题。

假设我有一个 User 模型,User 有一个指向 BankForeignKeyBank 可以打开(或不打开)。

我设置了权限,只有在 Bank 打开时才可以允许读取请求, 此外,任何人都可以创建 User 对象(例如,只有管理员用户才能创建 Bank)。 因此,我的 Bank 权限如下:

def has_object_permission(self, request, view, obj):
    if request.method in permissions.SAFE_METHODS
        return obj.opened
    return True

如果我将视图设置为 queryset = Bank.objects.all()
当我进入/banks时,我仍然可以看到关闭的银行(这不是我想要的)。如果我进入/banks/<pk>,我会收到需要身份验证的消息(这很好)。
所以,如果我将视图设置为 queryset = Bank.objects.filter(opened=True)
当我进入/banks时,只有已开放的银行被列出。
这里是棘手的部分, 如果我继续创建用户,由于Bank是一个ForeignKey,在API浏览器中,我仍然可以看到所有可用的银行列表,无论是否开放。
如何修复它,以便只显示已经开放的银行?希望我的例子足够清楚。谢谢!
1个回答

3

您可以为用户序列化程序覆盖bank字段:

class UserSerializer(serializers.ModelSerializer):
    bank = serializers.PrimaryKeyRelatedField(queryset=Bank.objects.filter(opened=True))

    class Meta:
        model = User

谢谢您的回复,我已经尝试了您的解决方案,它对我上述描述的问题有效。 - Wilfred Wee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接