Я недавно начал разрабатывать приложение Python для настольных компьютеров, и мне хотелось бы знать, как более опытные люди будут решать эту проблему.
Раньше я разрабатывал (около 5-10 лет назад) веб-приложения с использованием PHP + MySQL и тому подобное, поскольку код / программа находится на сервере, к которому у пользователя нет доступа (кроме веб-страницы). ), Я мог бы просто сохранить разрешения пользователя / группы в базе данных в таблице, скажем, users, users_groups, users_permissions и так далее. Затем я проверял бы при каждой загрузке страницы, имеет ли пользователь право доступа к этой странице / обновлению этой записи в базе данных.
В настольном приложении, где пользователь имеет доступ к исполняемому файлу (который может быть относительно легко декомпилирован в исходный код при написании на Python), подход, скорее всего, будет совсем другим.
Поскольку MySQL разветвлен в MariaDB и уже не так активно развивается, PostgreSQL выглядел многообещающе для запуска. Я думал о создании разных пользователей на уровне PostgreSQL и разрешении PostgreSQL обрабатывать разрешения (вместо того, чтобы мое приложение обрабатывало их напрямую).
Однако, это позволяет только настроить разрешения вплоть до уровня таблицы. Пользователю будет разрешено создавать / удалять / обновлять записи в таблице, однако дальнейшее управление недоступно. AFAIK, вы не можете сказать «разрешить этому пользователю обновлять только свои записи» или «этот пользователь может удалять только записи из этой группы», или «пользователи из группы X могут обновлять только свои собственные записи, в то время как пользователи из группы Y могут обновлять все записи» .
Мое понимание того, как справиться с такой проблемой, было бы поместить какое-то промежуточное приложение между пользователем и базой данных, расположенное на сервере, такое как:
Настольное приложение <-----> Обработчик разрешений для серверного приложения <-----> База данных
Там, где обработчик разрешений на стороне сервера может быть таким простым, как добавление «WHERE user = ...» к каждому запросу, а также гораздо более сложный материал (сначала проверьте разрешения пользователя, хранящиеся в базе данных, на основе того, что решите, разрешаете ли пользователь выполняет запрос или отклоняет его). Я думаю, что это общая проблема для всех настольных приложений и поэтому ожидается, что такое приложение на стороне сервера уже существует. Я упускаю что-то очевидное или, возможно, PostgreSQL позволяет более детально настроить?
Спасибо за вашу помощь;)