#python #web2py
#python #web2py
Вопрос:
Я хотел бы ограничить пользователей только созданными ими записями в базе данных. Есть ли у них какой-либо стандартный способ web2py сделать это? auth.requires_permission выглядел хорошо, но, похоже, для него требуется жестко запрограммированный идентификатор строки, что не решает мою проблему.
Ответ №1:
Это не должно обрабатываться web2py. Предполагается, что ваша база данных обрабатывает пользовательские разрешения для этого, поэтому вам нужно будет посмотреть в документации для используемого вами бэкэнда db.
Кроме того, если у каждого есть отдельная учетная запись пользователя на вашем интерфейсе, все они подключаются к одному пользователю базы данных, тогда вы вообще не сможете контролировать разрешения без набора независимого кода «безопасности», добавленного поверх вашей базы данных и вокруг нее. Например, таблица в базе данных, которая просматривает поле, предоставленное web2py при подключении, чтобы определить «пользователя», а затем соответствующим образом установить привилегии, закодированные вручную. У баз данных есть пользователи именно по этой причине.
Комментарии:
1. Django имеет управление доступом на основе объектов / строк.
Ответ №2:
Вы можете сделать это с помощью CRUD
http://web2py.com/book/default/chapter/08#Authorization-and-CRUD
Вы можете определить разрешения для каждой записи, с небольшим количеством кода вы сможете установить разрешения по умолчанию для идентификатора группы пользователей на момент создания записи.
Ответ №3:
Добавьте поле ‘created_by’ в базу данных. Вставьте идентификатор пользователя при вставке записи. Используйте это для фильтрации при выборе.
Ответ №4:
Возможно, попробовать обычные фильтры: http://web2py.com/books/default/chapter/29/06?search=common filter#Common-filters
db.some_table._common_filter = lambda query: db.some_table.created_by == auth.user.id
Ответ №5:
Используйте обратный вызов функции delete и верните True, если пользователь не создавал строку.
db.some_table._bedfore_delete = lambda query: False if db.some_table.created_by == auth.user_id else True
Комментарии:
1. Определенно хотелось бы увидеть систему, похожую на Django в этом