我的django应用程序中有多个FileField,它们可以属于不同的用户。我正在寻找一种很好的方法来限制不是文件所有者的用户对文件的访问。
实现此目标的最佳方法是什么?有任何想法吗?
不幸的是,由于django并非旨在提供文件服务,因此@Mikko的解决方案实际上无法在生产环境中运行。在生产环境中,文件需要由HTTP服务器(例如apache,nginx等)提供服务,而不是由应用程序/ Django服务器(例如uwsgi,gunicorn,mod_wsgi等)提供服务。
这就是为什么限制文件访问权限不是那么容易的原因:HTTP服务器需要一种方法来询问应用程序服务器是否可以将文件提供给请求它的特定用户。如您所知,这需要同时修改您的应用程序和http服务器。
解决上述问题的最佳方法是django-sendfile(https://github.com/johnsensible/django-sendfile),它使用X-SendFile机制来实现上述目的。我从项目的描述中复制:
这是将文件发送到Web客户端的Web服务器特定方法的包装。当Django需要检查与权限相关的文件,但又不想提供文件本身的实际字节时,这很有用。即作为服务大文件不是Django的目的。
要了解有关senfile机制的更多信息,请阅读以下答案:Django-了解X-Sendfile
2018更新:请注意,django-sendfile似乎不再被维护; 也许它应该仍然可以正常工作,但是,如果您想使用功能类似的更现代的软件包,请参阅https://github.com/edoburu/django-private-storage,就像评论者@ surfer190所建议的那样。尤其要确保您实现“优化大文件传输”部分;实际上,您不仅所有大型文件都需要此传输。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句