1

現在、django 1.3.1 を使用しているプロジェクトで問題が発生しています。これは管理インターフェイスです (親しみやすい近所の django.contrib.admin だけです)。プロジェクトはしばらく続いており、スタッフ ステータスのアカウントは常にスーパーユーザー アカウントのみでした。

これは変更されました。顧客は、より詳細な権限設定を持つアカウントを要求しました。指定したアカウントのスーパーユーザー ステータスを無効にし、適切な権限を手動で設定して、これを設定しようとしました。管理インターフェイスは、ユーザーがログインするときに手動で指定された権限を完全に無視するようです。すべての権限が指定されていても、ユーザーはコンテンツへのアクセスを拒否されます (ただし、管理インターフェイスにログインすることはできます)。

この問題は django のバージョンとは関係がないようです。1.3.3 と 1.4 への一時的なアップグレードを試したからです。運が悪い...

問題を追跡するのに役立つプロジェクト コードの一部を共有することに問題はありませんが、率直に言って、問題が何であるかを理解するのに途方に暮れています。いくつかの指針をいただければ幸いです。

4

2 に答える 2

1

独自の認証バックエンドを使用していますか? もしそうなら、あなたのバックエンド クラスは django.contrib.auth.backends.ModelBackend から派生していますか?

今日、自分のコードで同じ問題を発見しました。問題は、バックエンドがオブジェクトから派生したことであることが判明しました。特に、管理コードで使用される関数の一部 (has_module_perms など) がバックエンドに実装されていませんでした。

django.contrib.auth.backends.ModelBackend からバックエンドを派生させるか、管理コードに必要なすべての関数がバックエンドで定義されていることを確認してください。

于 2012-09-26T02:08:33.123 に答える
1

上記のyassamの回答に基づいて、この問題を解決する例を次に示します。私が持っていたコードが問題を引き起こしていました:

class MyCustomModelBackend(object):

    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(username__iexact=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

この問題を解決するには、次のように更新してから派生させますdjango.contrib.auth.backends.ModelBackend

from django.contrib.auth.backends import ModelBackend

class MyCustomModelBackend(ModelBackend):

    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(username__iexact=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None
于 2013-10-01T21:07:54.190 に答える