[英]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.