Доброго времени суток!
Задумка:
При входе в систему 1-н раз сделать запрос на права пользователя (его действия с объектами, например, имеет ли пользователь обращаться к определенной таблице или делать вставку, кто он и т.д.). На выходе получаю (пример) следующее результирующее множество в виде многомерного массива:
$arr = [
[
'r' => 'Администратор',
'og' => 'Таблицы',
'obj' => 't1',
'ac' => 'SELECT'
],
[
'r' => 'Администратор',
'og' => 'Таблицы',
'obj' => 't1',
'ac' => 'INSERT'
],
[
'r' => 'Администратор',
'og' => 'Таблицы',
'obj' => 't1',
'ac' => 'UPDATE'
],
[
'r' => 'Администратор',
'og' => 'Таблицы',
'obj' => 't1',
'ac' => 'DELETE'
],
[
'r' => 'Администратор',
'og' => 'Таблицы',
'obj' => 't2',
'ac' => 'SELECT'
],
[
'r' => 'Администратор',
'og' => 'Формы',
'obj' => 'log',
'ac' => 'INSERT'
)
];
Что хочу:
Сгенерировать пригодное для хранения представление массива (сериализовать) и закодировать полученные данные. Далее отправить код хранится в Session Storage.
Для чего:
Тут, скорее, уже ближе подхожу к своему вопросу, который напишу ниже.
Чисто субъективное мнение, чтобы каждый раз не обращаться к БД и не тратить на это время, можно получить зашифрованные данные из хранилища браузера и передать обработчику, который, в свою очередь, рассериализует и раскодирует зашифрованные данные в обратном порядке. А с помощью пользовательской ф-ции, например такой:
function handler(array $arr, ...$par) {
$flag = false;
if (is_array($arr)) {
foreach ($arr as $key => $val) {
if(is_array($val)) {
$compare = array_diff($par, array_values($val));
if (count($compare) < 1) {
$flag = true;
return $flag;
}
}
}
}
}
$q = handler($arr, 't1','INSERT', 'Таблицы');
if ($q) {
echo "Совпадения найдены!";
}
else {
echo "Совпадения НЕ найдены!";
}
смогу понять, к примеру, может ли пользователь делать записи в таблицу "t1" или нет, какая у него роль и т.п.
Т.е. все эти манипуляции для того, чтобы каждый раз не обращаться к БД.
Теперь САМ ВОПРОС:
1. Стоит ли так делать и почему;
2. Какой будет прирост производительности (разница обращение к файлу обработчика vs стучаться в БД);
3. Как Вы решаете подобные вопросы.
Если я ошибаюсь, подскажите пути решения!
Всем удачи и хорошего настроя на весь день!