我有一个管理汽车的应用程序。 每个用户都可以添加汽车并使用它,一切都很好,但我有一个问题。 假设 bob 通过 mysite.com/cars/1 和 mysite.com/cars/3 拥有汽车 1 和 3 marc 通过 mysite.com/cars/2 拥有汽车 2
问题是 bob 可以通过 mysite.com/cars/2 读取汽车信息,但这不是他的,与 marc 相同,通过 mysite.com/cars/1 和 mysite.com/cars/3。
我如何限制访问?通过中间件?
这个问题可以分片展开。汽车是由零件组成的。例如,鲍勃的车包含 mysite.com/pieces/1、mysite.com/pieces/2、mysite.com/和 mysite.com/pieces/3,马克的车是 mysite.com/pieces/4 Bob 无法访问 mysite.com/pieces/4,marc 无法访问 mysite.com/pieces/1 mysite.com/pieces/2 和 mysite.com/pieces/3。
请您参考如下方法:
我只是在猜测您的模型和 View ,但这是让您入门的简单方法:
View .py
from django.core.exceptions import PermissionDenied
def cars(request, car_id):
...
if request.user != car.owner:
raise PermissionDenied
...
更新:添加了import指令
更新 2:添加了一些仍在猜测您的 View 和模型的中间件代码。
对于中间件,方法应该是这样的:
my_app/middleware.py
# custom middleware
class CustomMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
# get the car param passed to the view (not sure if it is with kwargs or args
car_id = view_kwargs['car_id']
car = # retrieve car from the db
if request.user != car.owner:
raise PermissionDenied
您在 settings.py 中导入它,添加完整的 python 命名空间。
你可以看看 docs about middleware在我看来,它们的钩子(Hook)非常简单并且有据可查。
希望这对您有所帮助!
