Роли для сайта php

Мне нужно сделать так чтобы определенные ссылки были закрыты для пользователей, но были открыты для админа и модератора. введите сюда описание изображения

<?php
if ($_SESSION['role'] == '3');
    {
    echo'<a href="admin-panel.php">Админ панель</a>';
    }
else
    {
    echo'<a href="index.php">Вы не админ</a>';
    }
?>

ошибка [Fri Dec 10 10:16:44.529379 2021] [php7:error] [pid 4527] [client 192.168.101.52:53188] PHP Parse error: syntax error, unexpected 'else' (T_ELSE), expecting end of file in /var/www/portal.testlab01.local/public_html/cabinet.php on line 44, referer: portal.testlab01.local/kon.php


Ответы (1 шт):

Автор решения: Dmitriy Kondratiuk

"=" - присвоение значения. В вашем случае $_SESSION['role'] = '3' вы присваиваете $_SESSION['role'] значение 3. Даная операция всегда будет true соответственно всегда будет выполнятся первое условие.

"==" - проверка соответствия. То есть $_SESSION['role'] == '3' проверяем или левая часть $_SESSION['role'] равна 3. Если равна то будет true если нет то false.

Так как вам нужно проверить или пользователь может видеть ссылку то вам нужно: $_SESSION['role'] == '3' || $_SESSION['role'] == '2' но лучше создать глобальный массив с айди ролей которые имеют некий доступ. Например $CAN_CRUD = ["2", "3"] - здесь список айди ролей которые могут создавать/читать/редактировать/удалять то есть имеют полный доступ к сайту. Таких массивов можно создать несколько для разного уровня доступа к элементам сайта и потом на страницах проверять и выводить ту или иную информацию. Тогда ваша проверка будет выглядеть in_array($_SESSION['role'], $CAN_CRUD). Проверяем или значение в $_SESSION['role'] есть в массиве доступов, если есть то получим true если нет то false.

Тогда ваш код будет выглядеть приблизительно так:

$CAN_CRUD = ["2", "3"]
if (in_array($_SESSION['role'], $CAN_CRUD))
{
    echo'<a href="admin-panel.php">Админ панель</a>';
}
else
{
    echo'<a href="index.php">Вы не админ</a>';
}
→ Ссылка