वे किसी भी खाते पर is_superuser ध्वज सेट करने की क्षमता प्राप्त करते हैं, जिसमें स्वयं भी शामिल है। (!!!)
इतना ही नहीं, वे भी खुद को किसी भी अनुमतियाँ एक-एक करके, एक ही प्रभाव देने के लिए क्षमता हासिल ...
मुझे यकीन है कि यह Django उपवर्गीकरण शामिल .contrib.auth.forms.UserChangeForm
ठीक है, जरूरी नहीं। Django के व्यवस्थापक के परिवर्तन पृष्ठ में जो फॉर्म आप देखते हैं वह गतिशील रूप से व्यवस्थापक अनुप्रयोग द्वारा बनाया गया है, और UserChangeForm
पर आधारित है, लेकिन यह कक्षा username
फ़ील्ड में रेगेक्स सत्यापन को मुश्किल से जोड़ती है।
और मेरे पहले से ही कस्टम UserAdmin वस्तु में यह hooking ...
एक कस्टम UserAdmin
यहां जाने का रास्ता है। मूल रूप से, आप ऐसा ही कुछ करने के लिए fieldsets
संपत्ति बदलना चाहते हैं:
class MyUserAdmin(UserAdmin):
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
# Removing the permission part
# (_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
# Keeping the group parts? Ok, but they shouldn't be able to define
# their own groups, up to you...
(_('Groups'), {'fields': ('groups',)}),
)
लेकिन समस्या यह है कि यहाँ इस प्रतिबंध को सभी उपयोगकर्ताओं के लिए लागू होगी। यदि यह वही नहीं है जो आप चाहते हैं, तो उदाहरण के लिए आप उपयोगकर्ताओं की अनुमति के आधार पर अलग-अलग व्यवहार करने के लिए change_view
ओवरराइड कर सकते हैं। कोड स्निपेट:
class MyUserAdmin(UserAdmin):
staff_fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
# No permissions
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
(_('Groups'), {'fields': ('groups',)}),
)
def change_view(self, request, *args, **kwargs):
# for non-superuser
if not request.user.is_superuser:
try:
self.fieldsets = self.staff_fieldsets
response = super(MyUserAdmin, self).change_view(request, *args, **kwargs)
finally:
# Reset fieldsets to its original value
self.fieldsets = UserAdmin.fieldsets
return response
else:
return super(MyUserAdmin, self).change_view(request, *args, **kwargs)
कि चाल किया । इस तरह के एक पूर्ण जवाब के लिए धन्यवाद! –
चूंकि मैं अनुमतियों का प्रबंधन करने के लिए समूह का उपयोग कर रहा हूं, इसलिए मैंने समूह अनुभाग को 'staff_fieldsets' से हटा दिया है। –
धन्यवाद! इसने मेरी बहुत मदद की! हालांकि, Django 1.1.2 व्यक्तिगत जानकारी और बाकी से पहले '_' जैसा प्रतीत नहीं होता था। – Tyug