【发布时间】:2014-06-19 12:00:30
【问题描述】:
我正在为使用 HyperlinkeRelatedFields 等的超链接序列化程序实现自定义权限类。
检查很粗略:
def has_permission(self, request,view):
if request.method in permissions.SAFE_METHODS:
return True
if not request.user.is_authenticated():
return False
if request.user.is_staff:
return True
# POST: 'author' is a URL due to serializer being Hyperlinked
# meaning we have to translate URL to model (like the serializer)
# to perform the check
if url_to_user(request.DATA['author']) == request.user:
return True
鉴于代码中的注释,似乎让序列化程序在验证期间执行此检查可能会更好,尽管这会转移问题。这几乎就像验证类需要一个在调用 save() 之前传递新对象的方法,以从权限的角度检查 POST/PUT 是否可接受,而不是将 HTTP/权限相关的检查塞入验证中序列化器。
url_to_user 是特定于序列化的,并且在序列化程序的验证器部分中的检查将是特定于 request/http 的,而不仅仅是新模型的健全性/完整性检查。
这似乎是一件很常见的事情,所以我很好奇其他人采取了哪条路线,以及我是否缺少“更正确”的方法。
提前致谢。
【问题讨论】:
标签: python django django-rest-framework