Django Admin - 允许为is_staff用户显示模型

时间:2016-01-02 12:03:26

标签: django django-admin django-admin-actions

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

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

3 个答案:

答案 0 :(得分:2)

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检查模型是否可以在应用程序标签表中列出

答案 1 :(得分:1)

  

staff_member_required装饰

     

staff_member_required(redirect_field_name = '下',   login_url ='admin:login')[source]

     

此装饰器用于需要授权的管理视图。用这个功能装饰的视图   将有以下行为:

     

如果用户已登录,则是工作人员(User.is_staff = True),以及   处于活动状态(User.is_active = True),正常执行视图。

     

否则,请求将被重定向到login_url指定的URL   参数,包含查询字符串中最初请求的路径   由redirect_field_name指定的变量。例如:   /管理/登入/?接下来= /管理/调查/问题/ 3 /。

使用示例:

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

@staff_member_required
def my_view(request):
    ...

答案 2 :(得分:1)

这样的事情应该有效:

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)

请注意,此代码未经测试。