Я работаю над системой инвентаризации веб-приложений, которая включает в себя различные уровни пользовательских разрешений и микроуправление отдельными разрешениями на этих уровнях. Поэтому большинство администраторов имеют все разрешения, но вы можете создать администратора и убрать их с определенного разрешения. В конечном счете эти разрешения хранятся в виде битовой строки в базе данных MySQL, где 1 означает, что у них есть разрешение, а 0 означает, что они не имеют. Я работаю над тем, чтобы сделать систему более эффективной, не жертвуя безопасностью. Вместо того чтобы запускать поиск по базе данных и проверять разрешения каждый раз, когда пользователь хочет выполнить какое-либо действие, я хотел бы кэшировать разрешения в переменной сеанса PHP вместе с меткой времени, когда эти разрешения были удалены с сервера.PHP Глобальная отметка времени для кэширования разрешений
$query_getUser = $this->User->prepare("SELECT * FROM users WHERE Email = ?");
$query_getUser->bindParam(1, $Email);
$query_getUser->execute();
$result = $query_getUser->fetchAll(PDO::FETCH_ASSOC);
$date = new DateTime();
session_start();
$_SESSION['Email'] = $Email;
$_SESSION['Password'] = $Password;
$_SESSION['Timestamp']= $date->getTimestamp();
$_SESSION['Permissions']= $result['Permissions'];
Основная проблема, с которой я столкнулся, заключается в том, где хранить глобальную переменную для этого. Что было бы самым безопасным местом? По сути, я хочу, чтобы глобальная текущая дата кеша хранилась где-нибудь, где я могу получить к ней доступ для сравнения в O (1) раз.
Кроме того, существуют ли какие-либо серьезные проблемы с разрешениями реализации таким образом? Если разрешения пользователя изменены редко, а новый пользователь еще не имеет разрешений, пока он не будет добавлен в систему (поэтому create_user не вызывает обновление кеша, а modify_user), является ли это разумным подходом?
+1 для структурированного вопроса и подготовленных заявлений. – Jonast92