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

В настоящее время я реализовал процедуру входа в систему для веб-сайта, над которым работаю, согласно Этот учебник.

Также я не аутентифицирую пользователя в собственной системе djangos, потому что я использую аутентификацию по LDAP моей компании (django-auth-ldap).

В настоящее время я использую обычного пользователя для входа в базу данных, которая имеет универсальный доступ ко всем данным, что также дает полный доступ любому пользователю, входящему в систему на веб-сайте.

Чтобы избежать этого, я хотел бы знать, как я могу подключиться к базе данных как пользователь индивидуальный, который только что вошел на сайт.

Заранее спасибо и извините за плохой английский

0
0
94
2

Ответы 2

Ограничение доступа пользователей к функциям и аутентификация в БД обрабатываются в 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, отправляются от имени этого пользователя.

hböhmer 10.09.2018 14:06

Привет! Если я правильно понимаю вашу проблему, то создаваемый вами пользователь каждый раз является суперпользователем, верно?

Что ж, если вы используете модель 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/…

Risadinha 10.09.2018 11:35

Бэкэнд, который я использую для аутентификации, - это django-auth-ldap, это обеспечивает функциональность входа на ваш сайт, без необходимости заботиться о таких вещах, как хранение паролей и т. д., Потому что вы фактически аутентифицируетесь на внешнем сервере LDAP.

hböhmer 10.09.2018 14:03

Другие вопросы по теме