簡體   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