我正在使用Django rest框架创建一个Todo列表应用程序。
在这个应用程序中,只有经理可以在列表中发布任务。 用户个人资料有一个名为角色的字段。 我有一个扩展用户模型的用户配置文件模型。
model.py
{{1}}
用户个人资料有一个角色字段。
我希望唯一的经理可以在我的应用中发布任务。
如何编写自定义用户权限才能实现此目的? 仅限于POST请求。可以允许所有其他请求。
答案 0 :(得分:0)
您将创建一个子类rest_framework.permissions.IsAuthenticated
的权限,并在has_permission(self, request, view)
(see more)中添加您的逻辑。
如果您只想将其应用于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,OPTIONS和HEAD)?如果是这种情况,请将request.method != 'POST'
替换为request.method in permissions.SAFE_METHODS
。