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