【问题标题】:Force admin to show app regardless of permissions无论权限如何,都强制管理员显示应用
【发布时间】:2014-08-03 08:43:29
【问题描述】:

我正在做的项目已经脱离了 django 权限模型,并使用了本土的权限系统。

这是 django 管理员的问题。你们所有人我们的models.py hase代码都与此类似:

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 使用权限来决定是否显示应用程序。如果我从我们的应用程序中只给用户一个权限,那么一切都会正常运行。如果用户对某个应用没有权限,则该应用会被隐藏,即使 has_*_permission 会返回 true。

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

【问题讨论】:

    标签: python django permissions django-admin


    【解决方案1】:

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

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

    【讨论】:

    • 是的,这看起来是唯一合理的方法。我希望在 AdminSite 上有所收获。哦,好吧。
    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多