我正在使用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'
。