无论权限如何,强制管理员显示应用

时间:2014-06-12 21:35:08

标签: python django permissions django-admin

我正在处理的项目已经脱离了django权限模型,并使用了自己开发的权限系统。

这是django管理员的问题。各位我们的models.py hase code similer this:

def is_admin(user):
    return user.groups.filter(name__contains="APP Admin").exists()

def is_publisher(user):
    return user.groups.filter(name="101 - APP Publisher").exists()

def is_app_user(user):
    return is_admin(user) or is_publisher(user) or user.is_superuser

#admin.site.disable_action('delete_selected')

class DefaultPermitMixin(object):
    def has_change_permission(self, request, obj=None):
        return is_app_user(request.user)

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

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

所有ModelAdmins派生自DefaultPermitMixin,并且大多数都具有get_readonly_fields函数来实现字段或对象级别权限。

问题是django-admin正在使用Permissions来决定是否显示应用程序。如果我只为用户提供一个权限,那么一切都应该如此。如果用户没有应用的权限,则该应用会被隐藏,即使has_*_permission将返回true。

有没有办法覆盖此行为并强制管理员显示我的应用程序?

1 个答案:

答案 0 :(得分:1)

我认为您可以创建自定义身份验证后端并覆盖has_module_perms方法:

https://docs.djangoproject.com/en/dev/topics/auth/customizing/