Полагаю, это зависит от того, как будет использоваться ваша система, особенно от количества пользователей и папок.
Вы могли бы:
создавать всю структуру папок для каждого пользователя каждый раз, когда пользователь входит в систему
Дает вам быстрый обход с более высокими начальными издержками (в зависимости от вашего приложения это может быть не заметно)
создание одноуровневой структуры папок каждый раз, когда пользователь меняет свою текущую рабочую папку
Удаляет все начальные издержки, для пользователей, которые не меняют папки, производительность не снижается.
Что касается представления разрешений, вы можете посмотреть , как работает модель разрешений NTFS , вы можете предоставлять или отзывать разрешения, а также устанавливать их как наследующие или нет. Это, вероятно, самое сложное, что вы можете получить, если вы можете упростить, чтобы не обрабатывать отозванные разрешения и всегда наследовать, вам просто нужно пройти по иерархии папок сверху вниз, пока вы не найдете разрешение или завершение. В зависимости от того, как вы разрешаете пользователям перемещаться по вашей структуре, вы можете легко упростить это, просто перечислив узлы в текущей папке, которые может видеть пользователь, поскольку они уже должны неявно видеть текущую папку.
Схема, если у вас есть отношение «многие ко многим» между папкой и пользователем / группой (вы можете, если хотите, чтобы модели пользователей и группы были единым целым), ваш объект разрешений либо простой логический, либо более сложный объект в зависимости от того, какие типы разрешений вы хотите поддерживать. Я бы настроил что-то вроде этого, используя один из isValid
методов в зависимости от сложности вашей модели.