13

最後に、 Django Rest Frameworkについて少し混乱している点が 1 つあります。それは、パーミッション クラスと認証クラスの違いです。

これは私のsettings.pyです

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAdminUser',


),
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication',
    'rest_framework.authentication.SessionAuthentication',
),
'PAGINATE_BY': 10

}

そして私の見解では、私は次のことを持っています...

class ProfileList(generics.ListCreateAPIView):
    """
    API endpoint that represents a list of users.
    """
    permission_classes = (permissions.IsAdminUser,)
    model = Profile
    serializer_class = ProfileSerializer

    def pre_save(self, obj):
        obj.owner = self.request.user

上記で想定したことは、有効なトークンを持つユーザーが json リクエストを取得できる一方で、管理者ユーザーのみがブラウザー対応 API にアクセスできるということです。ただし、これは IsAuthenticated がアクセスを許可しているように見えるだけではありませんが、= これにより、ログイン時にユーザーがオンライン バージョンにアクセスできるようになります。

有効なトークンを持つすべてのユーザーがアクセスできるようにしたいのですが、セッションでオンライン API バージョンを表示する権限を持つのは管理者ユーザーだけです。これは可能ですか?

4

2 に答える 2

8

有効なトークンを持つすべてのユーザーにアクセスを許可したいのですが、管理者ユーザーのみがセッション付きのオンラインAPIバージョンを表示する権限を持っています。これは可能ですか?

最初に注目に値するのは、ブラウズ可能なAPIは、JSONにレンダリングするだけの場合よりも多くのアクセス許可をユーザーに与えないということです。これは、APIエンドポイントに対するはるかに優れたビューです。個人的には、APIに対する開発が容易になるため、通常、参照可能なAPIをエンド開発者に公開したいと思います。

管理者ユーザー以外のすべてのユーザーから本当に非表示にしたい場合は、次の2つの方法があります。

  1. get_renderers()ビューのメソッドをオーバーライドします。(ここに簡単に記載されています)を確認self.request.user.is_staffし、管理者ユーザーの場合にのみブラウズ可能なAPIレンダラーを含めることができます。

  2. ブラウズ可能なAPIレンダラーをサブクラス化し、オーバーライドします.render()。(たとえば、ここを参照してください)を使用して着信リクエストを取得しrenderer_context['request']、管理者ユーザーでない場合は標準のJSONにレンダリングするだけです。

于 2013-02-15T13:19:24.407 に答える
1

私はそれがドキュメントで説明されているように動作すると思います:

いずれかのアクセス許可チェックが例外に失敗した場合、PermissionDenied例外が発生し、ビューの本体は実行されません。

を設定する場合IsAdminUser、ユーザーは管理者である必要があります。そうでなければ、必要なものがすべて提供されていても、彼には許可がありませんDEFAULT_AUTHENTICATION_CLASSES

于 2013-02-15T13:56:54.530 に答える