我需要在Django管理界面中为is_staff=True
用户提供一些Django模型。
我不想为每个用户指定并为员工用户分配权限或组权限。
我需要在ModelAdmin
或BaseModelAdmin
类中覆盖哪种方法,还是有其他更简单的方法?
我正在使用Django 1.4版本
答案 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)
请注意,此代码未经测试。