1

いくつかのアプリを使ったDjangoプロジェクトがあります。特定のユーザーのアクセスを1つの特定のアプリのみに制限し、ユーザーの作成時に、つまり、views.pyなどのデコレータを使用してすべてのメソッドを変更する必要はありません@permission_required

これは可能ですか?つまり、ユーザー「A」がアプリ「Y」のコードを変更せずにアプリ「X」のみを使用できることを宣言することは可能ですか?

4

1 に答える 1

2

メソッドを実装するミドルウェアを作成してprocess_viewから、ビュー関数がどのアプリに属しているかを確認できます。

たとえば、これはあなたがそれを行うことができる1つの(潜在的にバグのある)方法です:

class RestrictAppMiddleware(object):
    def process_view(self, request, view_func, *args, **kwargs):
        view_module = view_func.__module__
        allowed_apps = apps_visible_to_user(request.user)
        if not any(app_name in view_module for app_name in allowed_apps):
            return HttpResponse("Not authorized", status=403)

明らかに、ヒューリスティックを改善する必要があり(たとえば、これにより、ユーザーは「foo」ビュー「foobar」にもアクセスできるようになります)、Djangoの組み込みビューに依存するアプリを検討する必要があります(例、direct_to_template)…しかし、これは私のやり方です。

于 2012-04-07T23:12:16.860 に答える