Django“admin.site.register(...)”仅适用于超级用户。

5

我想在后台管理界面仅向超级用户展示一个模型,而不向普通员工用户展示,这是否可行?

例如:

check which user is logged
if superuser

admin.site.register(model_1)
admin.site.register(model_2)
admin.site.register(model_3)
...

if staff_user

admin.site.register(model_1)   #show only one model in the admin

谢谢你

3个回答

4

谢谢Bruno,我正在开发一个管理数据库中产品的系统。用户登录后,可以插入一些产品,然后有一个公共视图来展示给未登录的用户。在这种情况下,是更好地给予用户员工权限还是为他创建自定义后端?我的目标是将该系统扩展到让任何用户都能够登录、插入产品并管理它们。谢谢。 - avafab
这真的取决于你的用户是谁以及后端有多复杂。如果你只有几个技术娴熟的用户,并且默认(或几乎默认)管理员对你的需求足够满足,那么就让他们成为员工。对于其他任何情况,我会选择自定义后端。考虑到你最后的陈述,我认为你肯定需要一个自定义的后端。 - bruno desthuilliers
我的问题是我需要在Django管理后台中使用一些嵌套的内联。但是我无法在单个视图中显示多个嵌套的内联。我希望有一个单独的视图,让工作人员用户可以管理有关产品的所有数据。 - avafab

1

实现这一点的方法之一是创建两个管理站点,一个用于管理员,另一个用于员工。考虑以下 HR 和 Root 管理员的示例:

  1. admin.py 中:
from django.contrib import admin
from django.contrib.admin import AdminSite
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth import get_user_model

from core.models import CV

User = get_user_model()

def has_superuser_permission(request):
    return request.user.is_active and request.user.is_superuser

# Only superuser can access root admin site (default)
admin.site.has_permission = has_superuser_permission

class HRAdminSite(AdminSite):
    """HR admin page definition"""
    site_header = "HR Admin"

hr_admin_site = HRAdminSite(name='hr_admin')

# available only to super_users
@admin.register(User)
class RootUserAdmin(UserAdmin):
    pass

# available to both types of admins hr (is_staff) and root (is_superuser)
@admin.register(CV)
@admin.register(CV, site=hr_admin_site)
class CVAdmin(admin.ModelAdmin):
    pass

在 `urls.py` 文件中。
from django.contrib import admin

from core.admin import hr_admin_site

urlpatterns = [
    path("root/", admin.site.urls),
    path("hr/", hr_admin_site.urls),
]

0
创建一个组,并将其与您的员工用户分配,并为该组分配权限。只有您分配给该组的模块和权限才能看到员工用户,其他人则不能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接