4

我想在管理后端只向超级用户展示一个模型,而不是向员工用户展示一个模型,这可能吗?

例子:

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

谢谢你

4

3 回答 3

4

它不能那样工作。您的admin.py模块在进程启动时被导入和评估一次,而不是每次进程处理请求时(希望否则它会非常缓慢)。解决方案是使用 django 的权限系统:https ://docs.djangoproject.com/en/1.5/topics/auth/default/#permissions-and-authorization

于 2013-09-27T07:28:37.670 回答
1

实现这一目标的方法之一是创建 2 个管理站点,一个供管理员使用,另一个供员工使用。考虑下面的 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
  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),
]
于 2021-01-29T13:48:47.867 回答
0

创建组并将其分配给您的员工用户并将权限分配给该组。只有您分配给该组的模块和权限才能看到其他员工用户。

于 2018-03-15T11:56:30.843 回答