Я работаю над функцией, которая принимает последовательность строк разрешений, длиной менее 255 символов, и присваивает их объекту. Каждая назначенная строка уникальна, но их так много, что удаление их в массив, их сериализация, добавление в базу данных, последующее извлечение и последующая десериализация или пересчет из запроса каждый раз, когда происходит загрузка, вызывает задержку. проблемы. Особенно с унаследованными разрешениями.
Итак, я подумал о том, чтобы взять строку, сгенерировать из нее маску, а затем ИЛИ в поле разрешений. По мере добавления дополнительных разрешений продолжайте ИЛИ их в глобус. Затем, когда вам нужно проверить разрешение и строку с глобусом.
Вопрос в том, как создать маску. Сначала я думал просто о хешировании строки для уникальной маски, однако это возможно, но я не знаю, насколько вероятно, что, поскольку большее количество хеш-значений ИЛИ направлено на глобус, существует потенциал для заполнения глобуса таким образом. Таким образом, и тестирование с разрешением, которого у них нет, но возвращает истинное значение.
if($glob&&$test == $test)
Другая опция будет просто автоматически нумеровать строки разрешений и иметь их маску 2 ^ авто-номер. Но это ограничило бы количество строк разрешений до 64ish.
Что мне действительно нужно, так это какой-то шар, который я могу вытащить из базы данных один раз и связать с пользователем. Затем протестируйте этот глобус со строкой или связанным значением, представляющим набор разрешений.