6

Tastypie 0.9.11を使用していますが、認証されていないユーザーにAPIへの読み取り専用権限を許可すると同時に、ユーザーがAPIキー認証で認証する場合、そのユーザーはで追加/変更/削除操作を実行できます。それらの同じモデル。

API Key Authentication + Django Authorizationを使用しても、要件1は満たされません(認証されていないユーザーはAPIにまったくアクセスできません)。[認証なし]を使用しても、ユーザーはAPIキー(要件2を満たさない)で認証できません。

この振る舞いを実現する簡単な方法があるに違いありません。助けてください。

ユヴァル・コーヘン、ありがとうございました

4

1 に答える 1

8

考慮する必要がある2つのことがあります。認証と承認。

まず、リクエストメソッドがGETの場合、APIキーに関係なくすべてのユーザーを認証する必要があります。他のすべてのメソッドでは、ApiKeyAuthenticationを使用します。

これで、認証されたすべてのユーザーが承認の対象になります。ここでは、GETリクエストが常に許可されていることも確認する必要があります。このような何かがあなたを始めるはずです:

from tastypie.resources import ModelResource
from tastypie.authentication import ApiKeyAuthentication
from tastypie.authorization import DjangoAuthorization

class MyAuthentication(ApiKeyAuthentication):
    """
    Authenticates everyone if the request is GET otherwise performs
    ApiKeyAuthentication.
    """

    def is_authenticated(self, request, **kwargs):
        if request.method == 'GET':
            return True
        return super(MyAuthentication, self).is_authenticated(request, **kwargs)

class MyAuthorization(DjangoAuthorization)
    """
    Authorizes every authenticated user to perform GET, for all others
    performs DjangoAuthorization.
    """

    def is_authorized(self, request, object=None):
        if request.method == 'GET':
            return True
        else:
            return super(MyAuthorization, self).is_authorized(request, object)

class MyResource(ModelResource):

    class Meta:
        authentication = MyAuthentication()
        authorization = MyAuthorization()

つまり、基本的には、GETリクエストを使用するためのアプローチでApiKeyAuthenticationあり、特別な処理が欠けているだけです。DjangoAuthorization

于 2012-09-05T01:33:24.860 に答える