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 を介して読み取ることができます。

アクセスを制限するにはどうすればよいですか? ミドルウェア経由?

この質問は、部分的に拡張できます。車は部品で構成されています。たとえば、ボブの車には mysite.com/pieces/1、mysite.com/pieces/2、mysite.com/、および mysite.com/pieces/3 が含まれ、マークの車には mysite.com/pieces/4 ボブは 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 に答える