2010-06-24 2 views
0

Я столкнулся с странным поведением при создании пользователя, используя интерфейс администратора Django. Мне нужно создать пользователя, который может добавить других пользователей, но для этого Django требует двух разрешений, то есть добавить пользователя и изменить пользователя. Но когда я дал пользователю разрешение на изменение, он даже смог изменить суперпользователя сайта.Django, создавая пользователя с добавлением разрешения пользователя

Я хочу создать пользователя, который может создавать только другие пользователи.

Просьба предложить.

Заранее спасибо.

+0

возможно дубликат [Как предотвратить разрешение эскалацию Джанго администратора при предоставлении «Смена пользователя» разрешения ?] (http://stackoverflow.com/questions/2297377/how-do-i-prevent-permission-escalation-in-django-admin-when-granting-user-change) –

+0

да, похоже, он должен работать .. попробует. Большое спасибо. Кроме того, есть ли какой-либо документ, в котором мы можем получить информацию о том, какой метод следует переопределить, для каких функций и какие параметры следует изменить. Как и в этом случае, мы переопределяем метод change_view для параметра field_set paramater? –

+0

Большинство методов, которые вы можете переопределить, находятся в файле django/contrib/admin/options.py –

ответ

0

Это не поддерживается по умолчанию в Django. Вы можете создать подкласс нормальный UserAdmin и сделать свой собственный, что отключает «суперпользователя» -checkbox для не суперпользователям:

from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 
from django.contrib import admin 

class MyUserAdmin(UserAdmin): 

    def formfield_for_dbfield(self, db_field, **kwargs): 
     field = super(MyUserAdmin, self).formfield_for_dbfield(db_field, **kwargs) 
     user = kwargs['request'].user 
     if not user.is_superuser: 
      if db_field.name == 'is_superuser': 
       field.widget.attrs = {'disabled': 'disabled'} 
     return field 

admin.site.unregister(User) 
admin.site.register(User, MyUserAdmin) 
+0

Правильно, это отключит виджеты, но идентификатор не гарантирует, что пользователь не сможет изменить этот объект. Вы должны переопределить 'save()' и сделать там необходимую проверку. –

Смежные вопросы