使用精彩的django-tastpie。
我的应用程序有一个文档概念(即word doc)。有一个文档的所有者和许多编辑。编辑可以添加评论。
我想在发布评论之前检查编辑是否对文档具有权限。但是我无法弄清楚如何使用tastpie执行此检查。
这是我的代码简化了一下:
# models.py
class Document(models.Model):
doc_text = models.TextInput()
owner = models.ForeignKey(User)
editor_group = models.ForeignKey(EditorGroup)
class EditorGroup(models.Model):
name = models.CharField()
user = models.ManyToManyField(User)
class Comment(models.Model):
comment = models.CharField()
user = models.ForeignKey()
document = models.ForeignKey()
-
# api.py
class CommentResource(ModelResource):
user = fields.ForeignKey(UserResource, 'user')
class Meta:
queryset = Comment.objects.all()
resource_name = 'comments'
authorization= DjangoAuthorization()
def obj_create(self, bundle, request, **kwargs):
# What code can I put here to check if the Editor is in the
# EditorGroup
return super(AnswerResource, self).obj_create(bundle, request, user=request.user)
如果编辑正在审阅文档并提交评论,我想在我允许他们创建评论之前验证他们是编辑组的一部分。
我已经研究过使用obj_create但是我不确定如何访问Document对象以查看Editor(现在是request.user)是否属于EditorGroup。
还不确定obj_create是否是执行此检查的正确位置。
非常感谢任何帮助!
答案 0 :(得分:1)
以下是其中一个选项:
if request.user.groups.filter(id=self.document.editor_group.id).exists():
...post_comment
else:
...don't post comment
答案 1 :(得分:1)
如果您需要检查Document对象上的内容,那么下面的解决方案似乎没问题。您可以使用build_related_resource
类的RelatedField
方法从URI获取资源并将其转换为有效的Django对象。但是,如果您需要检查组,权限和授权,最好在django-tastypie docs中查看Implementing Your Own Authentication/Authorization。
class CommentResource(ModelResource):
user = fields.ForeignKey(UserResource, 'user')
document = fields.ForeignKey(DocumentResource, 'user')
def obj_create(self, bundle, request=None, **kwargs):
document_uri = json.loads(request.POST.keys()[0]['document'])
document = self.document.build_related_resource(document_uri).obj
if request.user.has_permission_to(document) or request.user.is_editor:
[...]