我期待对通过tastypie提供REST接口的django网络应用进行更改。该应用程序可在:
https://github.com/OWASP/django-DefectDojo/django tastypie基于授权用户的REST查询过滤
内的应用程序,用户有产品他们有权查看和属于产品端点。
该机型是在定义:
https://github.com/OWASP/django-DefectDojo/blob/master/dojo/models.py#L177 https://github.com/OWASP/django-DefectDojo/blob/master/dojo/models.py#L417
我已经加入EndpointResource到dojo/api.py
:
class EndpointResource(BaseModelResource):
class Meta:
queryset = Endpoint.objects.all()
resource_name = 'endpoints'
fields = ['product', 'protocol', 'host', 'path', 'query', 'fragment']
list_allowed_methods = ['get']
detail_allowed_methods = ['get']
include_resource_uri = True
filtering = {
'product': ALL,
'protocol': ALL,
'host': ALL,
}
authorization = DjangoAuthorization()
authentication = DojoApiKeyAuthentication()
serializer = Serializer(formats=['json'])
类产品包括:
authorized_users = models.ManyToManyField(User, blank=True)
类端点包含:
product = models.ForeignKey(Product, null=True, blank=True,)
目前,用户可以验证到/api/v1/endpoints/
,他们会看到所有端点。
curl -v --header 'Authorization: ApiKey sue:5b632d76ef1a38b8375383e3498d063515b356d4' http://example.com/api/v1/endpoints/
然而,所需的行为是用户只能够访问他们被授权产品及其相关的实体,这些产品一起。
在Python会话中我可以这样做:
>>> from dojo.models import User, Product, Endpoint
>>> User.objects.get(username='sue').product_set.all().get().endpoint_set.all()
[<Endpoint: goliath.sue.local>, <Endpoint: goliath.suelimited.co>, <Endpoint: 192.168.10.11>]
这些对象,以“起诉”相关联的是,我想通过API返回的人。
什么是最好的方式让这与tastypie一起去?
任何帮助非常感谢,让我知道如果我需要张贴进一步的信息。
谢谢jaywhy13,目前的DjangoAuthorization工作正常,所以宁愿离开。我在下面添加了一个工作答案,但有兴趣看看这是否正确。 – user1330734