Как отключить смену пароля в django-admin для пользователей, которые зарегистрировались через LDAP-сервер
У нас есть приложение, в котором пользователи могут быть загружены через GUI. Другие пользователи приложения могут приходить с LDAP сервера. Пользователи с LDAP-сервера не должны иметь возможности изменить свой пароль django-admin. Лучше всего, если у них его вообще не будет. Я знаю, что есть возможность отключить их пароль:
user.set_unusable_password()
Теперь дело в том, что я не должен отключать пароли для пользователей, загруженных через GUI, только для тех, кто пришел с LDAP-сервера (потому что только пользователи с LDAP-сервера могут получить доступ к приложению в любом случае).
Какое лучшее место и способ отличить одно от другого? Я переопределил create_user()
в managers.py:
class CustomUserManager(BaseUserManager):
"""
Custom user model manager where email is the unique identifiers
for authentication instead of usernames.
"""
def create_user(self, email, password, **extra_fields):
"""
Create and save a User with the given email and password.
"""
if not email:
raise ValueError(_('The Email must be set'))
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save()
return user
Если я вставлю user.set_unusable_password()
в приведенный выше метод, я получу полную противоположность (т.е. я отключу pw для пользователей, загруженных через GUI, и оставлю его нетронутым для тех, кто пришел с LDAP-сервера)
Что я должен изменить/переопределить/добавить и т.д., если моя цель - перехватить событие, когда пользователь с поддержкой LDAP впервые входит в наше приложение? Какой метод, функция, класс, в каком файле?
Ниже приведена соответствующая модель:
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
и соответствующая часть forms.py
:
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ('email',)
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = ('email',)
Заранее спасибо.