Разрешения для папок на основе пользователей и групп - PullRequest
0 голосов
/ 10 июля 2010

Эй, я работаю над деревом папок и должен иметь возможность ограничить видимость определенной папки в зависимости от пользователя и группы, к которой он принадлежит. У меня уже есть представление базы данных всех папок в дереве и иерархии папок. Теперь у меня вопрос, как лучше всего представить разрешения.

Если мне, возможно, придется искать разрешения в отдельной таблице для каждой папки, это может дорого обойтись (я допускаю, что из-за иерархии мы можем скрыть все дочерние элементы скрытого узла папки, чтобы их можно было обесценить ).

Есть ли у кого-нибудь хорошие модели и алгоритмы, которые могли бы сделать это лучше? Я полагаю, что файловые системы Unix занимаются этим уже некоторое время, поэтому должны быть действительно хорошие идеи о том, как смоделировать эту проблему.

Обратите внимание, что в модели, с которой я имею дело, нет "владельца" папки. Папка может быть видимой для пользователя в каждом конкретном случае.

Я использую Java и Mysql, кстати

Ответы [ 3 ]

3 голосов
/ 10 сентября 2010

Полагаю, это зависит от того, как будет использоваться ваша система, особенно от количества пользователей и папок.

Вы могли бы:

создавать всю структуру папок для каждого пользователя каждый раз, когда пользователь входит в систему

Дает вам быстрый обход с более высокими начальными издержками (в зависимости от вашего приложения это может быть не заметно)

создание одноуровневой структуры папок каждый раз, когда пользователь меняет свою текущую рабочую папку

Удаляет все начальные издержки, для пользователей, которые не меняют папки, производительность не снижается.

Что касается представления разрешений, вы можете посмотреть , как работает модель разрешений NTFS , вы можете предоставлять или отзывать разрешения, а также устанавливать их как наследующие или нет. Это, вероятно, самое сложное, что вы можете получить, если вы можете упростить, чтобы не обрабатывать отозванные разрешения и всегда наследовать, вам просто нужно пройти по иерархии папок сверху вниз, пока вы не найдете разрешение или завершение. В зависимости от того, как вы разрешаете пользователям перемещаться по вашей структуре, вы можете легко упростить это, просто перечислив узлы в текущей папке, которые может видеть пользователь, поскольку они уже должны неявно видеть текущую папку.

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

alt text

1 голос
/ 09 сентября 2010

Следует учитывать одну вещь: изменение разрешений является редкой операцией, так же как и проверка разрешений для группы, тогда как проверка разрешений для отдельного пользователя невероятно распространена (каждый раз, когда пользователь обращается к папке).Поэтому лучший способ написать алгоритм - это сместить скорость в сторону проверки соответствия пользователя / папки и изменения привилегий.

1 голос
/ 07 сентября 2010

На базовом уровне лучше всего использовать свой первый инстинкт и создать справочную таблицу для разрешений для уникального идентификатора папки.

Затем сравнительный тест.

Если это слишком зависит от ресурса, вы можете включить разрешения как часть представления папки в вашей основной базе данных.

Но сначала запустите его, а затем работайте, если потери производительности слишком высоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...