Django管理接口,允许为非superus创建用户

2024-06-16 15:14:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我的情况是允许三类用户访问管理界面: -管理员 -主管 -代理人

这是一个层次结构的情况,管理员是一个(超级用户),它创建了主管,主管创建了代理。在

他们都可以使用distincts权限登录到django admin。在

登录名由'django.contrib.auth公司'使用默认模型auth\u user(。在

     from django.contrib.auth.models import User

class Supervisor(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    e_mail = models.EmailField(max_length=60, db_column='E-Mail',blank=True)
   ...other fields....


class Admin(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    e_mail = models.EmailField(max_length=60, db_column='E-Mail',blank=True)
     ...other fields...

但是,有一个问题。如果我允许主管创建代理,则意味着我必须添加权限才能添加和更改表用户。这很危险,任何主管都可能成为超级用户,删除用户等。。。。在

我怎样才能解决这个问题??有没有可能允许主管创建一个代理人,而不让他有危险??在

谢谢


编辑

我有一个疑问。。。在模型.py在定义I类时编写了以下方法:

^{pr2}$

在Java中,EJB的方法是事务性/原子性的(提交是自动的)。。。在django中,我必须调用save()方法。在

这是一个不同于以前的问题。。。。。在


Tags: django方法用户模型auth权限代理models
1条回答
网友
1楼 · 发布于 2024-06-16 15:14:22

不知道我是否能理解你的问题。但是,如果我这样做了,你可以编辑用户创建表单。在

@admin.register(User)
class UserAdmin(BaseUserAdmin):
    view_on_site = False
    list_display = ('username', 'first_name', 'last_name', 'is_active', 'is_staff', 'date_joined', 'last_login')
    list_filter = ('is_staff', )
    fieldsets = (
        ('Data', {'fields': ('username', 'email', 'first_name', 'last_name', 'password')}),
        ('Activation/Deactivation', {'fields': ('is_active', )}),
        ('Permissions', {'fields': ('is_staff', 'groups', )})
)

由于superuser不再是一个选项,您的主管不能成为超级用户。在

如果有帮助,请告诉我。也许我们能更接近解决方案。在

相关问题 更多 >