2

ドキュメントを読むと、Django のデフォルトのパーミッション システムがモデルに関連付けられていることがわかりました。これは、管理インターフェイス用に作成されているため理解できます。

これはビューにとって何を意味しますか? ビューのアクセス許可のみを使用している場合、アクセス許可に接続されているモデルは使用されませんか?

ここで、この質問をもう少し具体的にします。私の目標は、ビューを 1 つの特定のユーザー グループに限定することです。

  1. ContentType を作成します。
    content_type = ContentType.objects.get(app_label='myapp', model='SomeModel')

  2. アクセス許可を作成します。
    permission = Permission.objects.create(codename='can_view_this', name='Can Access this View', content_type=content_type)

  3. グループを作成します。
    group = Group.objects.get_or_create(name='some_group')

  4. グループに権限を追加します。
    group.permissions.add(permission)

  5. グループにユーザーを追加します。
    group.user_set.add(User.objects.get(id=1))

  6. 許可をテストします。
    @user_passes_test(lambda u: u.has_perm('myapp.can_view_this'))
    def some_view(request):

ステップ 1 に戻ると、ContentType を作成するためにモデルを割り当てる必要があったことに注意してください。また、Permission エントリの作成には ContentType が必要であるため、ContentType を作成する必要がありました。

問題は、もう一度言いますが、SomeModelそれはこのシナリオでまったく使用されているのでしょうか? ビュー固有のアクセス許可を割り当てるモデルが正確に何であるかはわかりませんが、意味がありません。

うまくいけば、質問は理にかなっています。

4

1 に答える 1

1

上記のシナリオでSomeModelは、ステップ 6 で投稿されたビュー コードで直接使用されていません。ただし、完全に記述すると、オブジェクトを照会 (つまり、表示) するdef some_view作業をしていることに気付くでしょう。SomeModel

@user_passes_test(lambda u: u.has_perm('myapp.can_view_this'))
def some_view(request, template_name='some_template.html'):
    queryset = SomeModel.objects.filter(foo='bar')

    return render(request, template_name, {'queryset': queryset})

他のビューでは、オブジェクトを削除していることに気付くでしょう:

@user_passes_test(lambda u: u.has_perm('myapp.delete_somemodel'))
def some_delete_view(request, pk, template_name='some_template.html'):
    object = SomeModel.objects.get(pk=pk)
    object.delete()

    return render(request, template_name, {})

あなたの例では、django モデルのアクセス許可を暗黙的に使用するものは何もありません。それはあなた次第です。

Django モデルにはデフォルトで、追加、変更、削除の 3 つのパーミッションが付属しています。上記のようにカスタム権限を追加するか、時間を節約するためにモデルの Meta クラスでそれらを指定できます

于 2013-06-30T15:29:25.020 に答える