В настоящее время у меня есть таблицы как: Pages, Groups, GroupPage, Users, UserGroup
. С маринованными наборами я могу реализовать то же самое только с 3 таблицами: Pages, Groups, Users
.
set
кажется естественным выбором для реализации ACL, так как операции с группами и разрешениями могут быть очень естественно выражены с помощью множеств Если я сохраню списки разрешений / запретов в виде маринованных наборов, это может исключить несколько промежуточных таблиц для отношения «многие ко многим» и разрешить редактирование разрешений без множества операций с базой данных.
Если важна читаемость человеком, я всегда могу использовать json вместо cPickle для сериализации и использовать set
при манипулировании списком разрешений в Python. Маловероятно, что разрешения когда-либо будут редактироваться напрямую с использованием SQL. Так это хорошая идея дизайна?
Мы используем SQLAlchemy в качестве ORM, поэтому он может быть реализован с помощью столбца PickleType
. Я не планирую хранить весь подобранный набор записей «ресурсов», только объект set
, состоящий из значений первичного ключа «ресурсов».