Я внедряю файловую систему. Каждая папка имеет ACL, который в основном будет просто списком идентификаторов пользователей, которым разрешено чтение / запись в папку. Я хочу реализовать это путем копирования списков ACL из папок верхнего уровня в папки нижнего уровня - мне нужны унаследованные разрешения, но я не хочу искать их во время чтения. Я храню отношения между папками в виде ссылки на суперпапку в подпапке.
С HRD трудно решить следующий порядок операций:
- Поместите папку B в хранилище данных как подпапку папки A, которая уже существует.
- Изменить права доступа на A.
Проблема в том, что когда я изменяю разрешения для A на шаге 2, мне нужно найти все дочерние элементы A, чтобы я также мог применить изменения разрешений для них. К сожалению, это означает запрос, поэтому B может не отображаться в этом запросе. B может пропустить изменения разрешения!
Единственное решение, о котором я до сих пор думал, - это хранить отношения «подпапки» в двух направлениях: A имеет ссылку на все свои подпапки, а B имеет ссылку на свою суперпапку. Тогда я мог бы использовать межгрупповую транзакцию для одновременного обновления A и B, и на шаге 2 не потребовался бы запрос. В любом случае это может быть лучше, поскольку прямые запросы можно легко кэшировать, не требуя сканирования индекса и т. Д.
У кого-нибудь есть еще идеи? Мне не нравятся потребности этого решения в избыточном хранилище или необходимость транзакций XG.