Как отключить смену пароля в 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',)

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

Вернуться на верх