В настоящее время я реализовал процедуру входа в систему для веб-сайта, над которым работаю, согласно Этот учебник.
Также я не аутентифицирую пользователя в собственной системе djangos, потому что я использую аутентификацию по LDAP моей компании (django-auth-ldap).
В настоящее время я использую обычного пользователя для входа в базу данных, которая имеет универсальный доступ ко всем данным, что также дает полный доступ любому пользователю, входящему в систему на веб-сайте.
Чтобы избежать этого, я хотел бы знать, как я могу подключиться к базе данных как пользователь индивидуальный, который только что вошел на сайт.
Заранее спасибо и извините за плохой английский
Ограничение доступа пользователей к функциям и аутентификация в БД обрабатываются в Django отдельно. Возможно, вы сможете прочитать привилегии ваших пользователей из БД и сопоставить их с разрешениями Django, но это нетривиально (о разрешениях см. https://docs.djangoproject.com/en/2.1/topics/auth/default/#permissions-and-authorization).
В пользовательском интерфейсе / пользовательском интерфейсе, функциональные возможности которого ограничены в зависимости от авторизации, интерфейс и серверная часть должны знать, что разрешения должны быть проверены, а отсутствующая авторизация должна быть так или иначе сообщена пользователю.
Пример:
Пользователи в группе A могут удалить X. Они видят кнопку «удалить», а также может быть вызов AJAX, который может удалить X.
Пользователи в группе B не могут удалять X. Они не видят кнопку удаления, и вызов AJAX, который может удалить X, должен проверить это разрешение и / или членство в группе пользователей.
Если вы используете только уровень авторизации уровня БД, то как узнать, должна ли отображаться кнопка «удалить» и что проверять в вызове AJAX?
Привет! Если я правильно понимаю вашу проблему, то создаваемый вами пользователь каждый раз является суперпользователем, верно?
Что ж, если вы используете модель Django auth.User
, вы можете просто преобразовать User_object.is_super
в False
, а затем ограничить доступ пользователей, хотя в поле зрения if-else! (User_object - это объект модели auth.User)
Есть ли в этом смысл?
// Кстати, примечание, ошибка, которую я допустил при создании своей первой пользовательской модели: не забудьте сохранить хешированные пароли с использованием хешей и солей Django!
Django автоматически хеширует ваши пароли? Используйте User.objects.create_user()
и create_superuser()
, см. docs.djangoproject.com/en/2.1/topics/auth/passwords/…
Бэкэнд, который я использую для аутентификации, - это django-auth-ldap, это обеспечивает функциональность входа на ваш сайт, без необходимости заботиться о таких вещах, как хранение паролей и т. д., Потому что вы фактически аутентифицируетесь на внешнем сервере LDAP.
Ограничения на доступ к данным из базы данных управляются в самой СУБД, мне просто нужен способ входа разных пользователей в базу данных во время выполнения, поэтому запросы, отправленные из django, отправляются от имени этого пользователя.