繁体   English   中英

Django-管理界面-允许为非超级用户创建用户

[英]Django - Admin Interfaces - to allow create users for non-superuser

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

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

他们所有人都可以使用专有授权登录django admin。

该登录名已由“ django.contrib.auth”使用默认模型auth_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...

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

我该如何解决这个问题? 是否可以允许主管创建代理,而没有危险呢?

谢谢


编辑

我有一个疑问...在定义类的过程中,我在models.py中编写了此方法:

def save(self):
    self.user.is_staff = True
    self.user.save()
    super(Agent, self).save()

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

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

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

@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选项,因此您的主管不能成为超级用户。

让我知道是否有帮助。 也许我们可以更接近解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM