gpt4 book ai didi

python - 如何处理 Django REST 框架中字段的 3 级权限

转载 作者:行者123 更新时间:2023-11-28 18:40:13 25 4
gpt4 key购买 nike

我正在构建 Django REST 作为后端,Angular JS 作为前端。

现在我拥有非常先进的 3 级权限系统

class UserSerializer(serializers.Serializer):
email = serializers.EmailField()
username = serializers.CharField(max_length=100)
field1 = serializers.CharField(max_length=100)
field2 = serializers.CharField(max_length=100)
field3 = serializers.CharField(max_length=100)
field4 = serializers.CharField(max_length=100)

现在想要权限

User Role
view
READ / Write / Update /Delete

有 10 个 Angular 色,30 个 View ,如 /user/view1 /user/view2 然后 READ 或 write like

这些是字段级别的权限,例如

Field1 can be READ by Manager level on view 1
Field1 can be Edit by Manager level on view 2
Feild1 can be Delete by Admin on View 1

我很困惑我怎么会有那种权限模型。

最佳答案

我通常会为这些情况推荐不同的序列化程序类,但这会限制您的读写权限(某种程度上)并且可能无法完全满足您的需求。

您将为每个权限级别创建一个序列化程序。假设存在三个权限级别:Admin、Manager、Normal user。

class NormalUserSerializer(ModelSerializer):
email = serializers.EmailField(read_only=True, required=True)
username = serializers.CharField(max_length=100, read_only=True)

class Meta:
fields = ("email", "username", )

class ManagerUserSerializer(NormalUserSerializer):
email = serializers.EmailField(read_only=False, required=True)
username = serializers.CharField(max_length=100, read_only=False)

class AdminSerializer(ManagerUserSerializer):
email = serializers.EmailField(read_only=False, required=False)
username = serializers.CharField(max_length=100, read_only=False)

这会将普通用户限制为字段的只读 View (read_only 由 DRF 强制执行)。对于管理者来说,他们有读写字段的能力,但是他们不能清除email字段的内容(由required强制执行)。管理员能够读取和写入所有字段,以及清除 email 字段的内容。

然后您的 View 将根据经过身份验证的用户的 Angular 色在 get_serializer_class 中返回正确的序列化程序类。

class UserViewSet(ModelViewSet):

def get_serializer_class(self):
if self.request.user.is_superuser:
return AdminUserSerializer

if self.request.user.is_staff:
return ManagerUserSerializer

return NormalUserSerializer

另一种选择是强制执行 validate 方法中的所有内容,并在序列化程序的 to_native 方法中手动删除字段。如果您可以忍受为每个 Angular 色创建一个序列化程序,那么这是在 Django REST Framework 中对各个字段实现基于 Angular 色的权限的最简单且(可以说)最干净的方法。

关于python - 如何处理 Django REST 框架中字段的 3 级权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27211956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com