2

我有一个管理汽车的应用程序。每个用户都可以添加汽车并访问它,一切都很好,但我有一个问题。假设 bob 通过 mysite.com/cars/1 拥有汽车 1 和 3,而 mysite.com/cars/3 marc 通过 mysite.com/cars/2 拥有汽车 2

问题是鲍勃可以通​​过 mysite.com/cars/2 读取汽车信息,但这不是他的,与 marc 同上,通过 mysite.com/cars/1 和 mysite.com/cars/3。

我如何限制访问?通过中间件?

这个问题可以用碎片来扩展。汽车是由零件组成的。例如,bob 的车包含 mysite.com/pieces/1、mysite.com/pieces/2、mysite.com/ 和 mysite.com/pieces/3,Marc 的车 mysite.com/pieces/4 Bob 无法访问 mysite .com/pieces/4,marc 无法访问 mysite.com/pieces/1 mysite.com/pieces/2 和 mysite.com/pieces/3。

4

1 回答 1

3

我只是在这里猜测您的模型和视图,但这是让您入门的简单方法:

视图.py

from django.core.exceptions import PermissionDenied
def cars(request, car_id):
    ...
    if request.user != car.owner:
        raise PermissionDenied
    ...

更新:添加了import指令

更新 2:添加了一些仍在猜测您的视图和模型的中间件代码。

使用中间件的方法应该是这样的:

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 命名空间时导入它。

您可以查看有关中间件及其钩子的文档,在我看来,这些文档非常简单且有据可查。

希望这可以帮助!

于 2013-05-27T17:09:32.213 回答