Разрешения базы данных для приложения Python Desktop - PullRequest
1 голос
/ 20 мая 2019

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

Раньше я разрабатывал (около 5-10 лет назад) веб-приложения с использованием PHP + MySQL и тому подобное, поскольку код / ​​программа находится на сервере, к которому у пользователя нет доступа (кроме веб-страницы). ), Я мог бы просто сохранить разрешения пользователя / группы в базе данных в таблице, скажем, users, users_groups, users_permissions и так далее. Затем я проверял бы при каждой загрузке страницы, имеет ли пользователь право доступа к этой странице / обновлению этой записи в базе данных.

В настольном приложении, где пользователь имеет доступ к исполняемому файлу (который может быть относительно легко декомпилирован в исходный код при написании на Python), подход, скорее всего, будет совсем другим.

Поскольку MySQL разветвлен в MariaDB и уже не так активно развивается, PostgreSQL выглядел многообещающе для запуска. Я думал о создании разных пользователей на уровне PostgreSQL и разрешении PostgreSQL обрабатывать разрешения (вместо того, чтобы мое приложение обрабатывало их напрямую).

Однако, это позволяет только настроить разрешения вплоть до уровня таблицы. Пользователю будет разрешено создавать / удалять / обновлять записи в таблице, однако дальнейшее управление недоступно. AFAIK, вы не можете сказать «разрешить этому пользователю обновлять только свои записи» или «этот пользователь может удалять только записи из этой группы», или «пользователи из группы X могут обновлять только свои собственные записи, в то время как пользователи из группы Y могут обновлять все записи» .

Мое понимание того, как справиться с такой проблемой, было бы поместить какое-то промежуточное приложение между пользователем и базой данных, расположенное на сервере, такое как: Настольное приложение <-----> Обработчик разрешений для серверного приложения <-----> База данных

Там, где обработчик разрешений на стороне сервера может быть таким простым, как добавление «WHERE user = ...» к каждому запросу, а также гораздо более сложный материал (сначала проверьте разрешения пользователя, хранящиеся в базе данных, на основе того, что решите, разрешаете ли пользователь выполняет запрос или отклоняет его). Я думаю, что это общая проблема для всех настольных приложений и поэтому ожидается, что такое приложение на стороне сервера уже существует. Я упускаю что-то очевидное или, возможно, PostgreSQL позволяет более детально настроить?

Спасибо за вашу помощь;)

1 Ответ

0 голосов
/ 20 мая 2019

Ваша интуиция права. Никогда не стоит иметь клиентский доступ напрямую к базе данных. Взгляните на Джанго https://www.djangoproject.com и https://www.django -rest-framework.org Это будет основой для вашего сервера. Вы бы здесь обрабатывали бизнес-логику, аутентификацию, авторизацию. Клиент должен в основном представлять данные в пользовательском интерфейсе и делегировать все решения на сервер.

Здесь вы можете найти пошаговое руководство по реализации REST API с аутентификацией пользователя в Django. https://wsvincent.com/django-rest-framework-authentication-tutorial/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...