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

sdnqo3pr  于 2022-12-20  发布在  Go
关注(0)|答案(3)|浏览(126)

我想显示一个模型在后台管理只给超级用户,而不是工作人员用户,这是可能的?
示例:

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

谢谢

jei2mxaa

jei2mxaa1#

这样做是行不通的,admin.py模块是在进程启动时导入和赋值的,而不是在进程每次处理请求时(否则会非常慢),解决方法是使用django的权限系统:https://docs.djangoproject.com/en/dev/topics/auth/default/#permissions-and-authorization

lo8azlld

lo8azlld2#

实现这一目标的方法之一是创建2个管理网站,一个为管理员,另一个为工作人员。考虑下面的例子与人力资源和根管理员:
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

1.单位: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),
]
4nkexdtk

4nkexdtk3#

创建组并将其与您的员工用户一起分配,然后为该组分配权限。只有分配给该组的模块和权限才能看到员工用户,否则就看不到。

相关问题