4

我需要is_staff=True在 Django 管理界面中为用户提供一些 Django 模型。我不想为每个用户分配权限或组权限给员工用户。

我需要在ModelAdminBaseModelAdmin类中覆盖哪种方法,或者还有其他更简单的方法吗?我正在使用 Django 1.4 版本

4

3 回答 3

4
class TeacherAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        return True
    def has_change_permission(self, request, obj=None):
        return True
    def has_module_permission(self, request):
        return True

has_module_permission 检查模型是否可以在应用标签表中列出

于 2017-10-06T08:35:31.647 回答
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(s) 都应该继承这个类。例如:

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 回答