Как отключить изменение пароля django-администратора для пользователей, которые зарегистрировались через сервер LDAP

#django #django-models #ldap #django-admin

#django #django-models #ldap #django-admin

Вопрос:

У нас есть приложение, в которое пользователи могут быть загружены с помощью графического интерфейса. Другие пользователи приложения могут заходить с сервера LDAP. Пользователи, поддерживаемые сервером LDAP, не должны иметь возможности изменять свой пароль администратора django. Самый лучший, если у них даже его нет. Я знаю, что есть возможность отключить их пароль:

 user.set_unusable_password()  

Теперь дело в том, что я не должен отключать пароли для пользователей, загруженных с помощью графического интерфейса, только для тех, кто пришел с 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 для пользователей, загруженных с помощью графического интерфейса, оставив его нетронутым для тех, кто пришел с 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',)  

Thanks in advance.