4

is_staff=TrueDjango 管理インターフェースで、ユーザーがいくつかの Django モデルを使用できるようにする必要があります。各ユーザーにアクセスして、アクセス許可またはグループ アクセス許可をスタッフ ユーザーに割り当てたくありません。

ModelAdminまたはクラスでどのメソッドをオーバーライドする必要がありますか、またはBaseModelAdmin他の簡単な方法はありますか? 私はDjango 1.4バージョンを使用しています

4

3 に答える 3

3

このようなものが動作するはずです:

class StaffRequiredAdminMixin(object):

    def check_perm(self, user_obj):
        if not user_obj.is_active or user_obj.is_anonymous():
            return False
        if user_obj.is_superuser or user_obj.is_staff:
            return True
        return False

    def has_add_permission(self, request):
        return self.check_perm(request.user)

    def has_change_permission(self, request, obj=None):
        return self.check_perm(request.user)

    def has_delete_permission(self, request, obj=None):
        return self.check_perm(request.user)

すべての ModelAdmin がこのクラスを継承する必要があります。例えば:

class MyModelAdmin(StaffRequiredAdminMixin, admin.ModelAdmin):
    pass

admin.site.register(MyModel, MyModelAdmin)

このコードはテストされていないことに注意してください。

于 2016-01-03T18:26:21.783 に答える
1

staff_member_required デコレーター

staff_member_required(redirect_field_name='next', login_url='admin:login') [ソース]

このデコレーターは、承認が必要な管理ビューで使用されます。この関数で装飾されたビューは、次のように動作します。

ユーザーがログインしており、スタッフ メンバーであり (User.is_staff=True)、アクティブである (User.is_active=True) 場合は、通常どおりビューを実行します。

それ以外の場合、リクエストは login_url パラメータで指定された URL にリダイレクトされます。最初にリクエストされたパスは、redirect_field_name で指定されたクエリ文字列変数に格納されます。例: /admin/login/?next=/admin/polls/question/3/。

使用例:

from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required
def my_view(request):
    ...
于 2016-01-02T12:15:54.823 に答える