#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.