根据用户配置文件模型字段角色自定义用户权限



我正在使用Django rest框架创建一个Todo list应用程序。

在这个应用程序中,只有管理员可以在列表中发布任务。用户配置文件有一个名为角色的字段。我有一个用户配置文件模型与扩展的用户模型。

model.py

class UserProfile(models.Model):
    user = models.OneToOneField(User,unique=False)
    department = models.CharField(max_length=50, choices=DEPARTMENT_CHOICES,default='technology')
    role = models.CharField(max_length=50, choices=ROLE_CHOICES,default='manager')

User Profile有role字段

我想要唯一的经理可以在我的应用程序中发布任务。

如何编写自定义用户权限来实现这一点?仅限POST请求。

您将创建一个子类rest_framework.permissions.IsAuthenticated的权限,并在has_permission(self, request, view)中添加您的逻辑(查看更多)。

如果您只想将其应用于POST,只需检查请求的方法并返回True,如果它是一个不同的方法。比如:

from rest_framework import permissions
class CustomPermission(permissions.IsAuthenticated):
    def has_permission(self, request, view):
        if request.user.user_profile.role == 'ADMIN' or request.method != 'POST':
            return True
        return False

不要忘记在视图的permission_classes中包含这个权限。

PS:我应该警告你,虽然,这是有点奇怪,你只允许管理员的POST任务,而允许每个人对他们进行PUT和DELETE。也许你的意思是你想让每个人在safe_methods只(GET,选项和头)?如果是这种情况,用request.method in permissions.SAFE_METHODS代替request.method != 'POST'

最新更新