Всем привет! Не могу разобраться (точнее понять правильно ли делаю) в ролях пользователей на сайте.
Значит у каждого пользователя в БД есть поле
ID_GROUP. Например
1 - администратор,
2 - модератор и т.д.
У каждой группы в БД хранятся свои разрешения, например:
dell_all_news - может ли удалять любые новости
dell_my_news - может ли удалять свои новости
При запросе любой страницы - проверяется файл COOKIE или TOKEN присланный вместе с запросом. С этими токеном или кукой обращаемся к классу "одиночка" который получает данные о пользователе (класс получается доступен в любом файле веб приложения).
Теперь... Правильно ли я понимаю... Например, мы получаем запрос от пользователя удалять новость с
ID ==
33
Значит в файле удаления должен быть примерно такой код?
// подключаемся к классу одиночка, который будет работать с текущим пользователем
$account = Account::getInstance();
try{
// проверяем авторизован ли пользователь
// и там же получаем все данные о пользователе, если авторизован
if(!$account->isAuth()) throw new Exception("Нужна авторизация");
// получаем из БД все разрешенные действия пользователя и храним их в классе account
$account->getRoles();
// Получаем данные о посте, который пользователь хочет удалять
$id = intval($_GET['id']);
$res = $db->query("SELECT * FROM `news` WHERE `id` = {$id}");
$row = $res->fetch_assoc();
// по умолчанию не разрешаем пользователю удалять
$allow = false;
// проверяем является ли владельцем текущий пользователь
if($account->getId() == $row['author_id']){
// пользователь автор новости, поэтому проверяем может ли он удалять свои новости
if($account->checkRoles('dell_my_news')){
$allow = true;
}
}else{
// пользователь НЕ автор новости, поэтому проверяем может ли он удалять чужие
if($account->checkRoles('dell_all_news')){
$allow = true;
}
}
// если пользователю разрешено по какому-то параметру удалять, то удаляем новость
if($allow){
//..... запрос на удаление
}else{
throw new Exception("Нет доступа");
}
}catch(Exception $e){
die($e->getMessage());
}
Вроде получается очень громоздко, поэтому возник такой вопрос. Ведь если мы выводим список новостей в каком-то разделе, то при переборе массива нвостей мы также должны сделать эти же самые проверки (автор/не автор, может удалять свои/может удалять чужие) только для того чтобы решить, показывать пользователю кнопку "удалить" на странице или нет...
Пожалуйстa, подскажите, если я что-то делаю не правильно...