Авторизация по ролям php mysql

200
24 января 2021, 05:50

Есть страничка авторизации и база данных.

В Базе соответственно все как полагается: id, log, pass, role.

Как сделать, чтобы при авторизации, если у логина условная роль Х То редирект на 1 страницу (условный админ), если у него будет роль Y (просто пользователь) - то редирект на другую страницу.

<?php
// Страница авторизации
// Функция для генерации случайной строки
function generateCode($length=6) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
    $code = "";
    $clen = strlen($chars) - 1;
    while (strlen($code) < $length) {
            $code .= $chars[mt_rand(0,$clen)];
    }
    return $code;
}
// Соединямся с БД
$link=mysqli_connect("localhost", "root", "", "usersdb");
$message;
if(isset($_POST['submit']))
{
    // Вытаскиваем из БД запись, у которой логин равняеться введенному
    $query = mysqli_query($link,"SELECT user_id, user_password, user_role FROM users WHERE user_login='".mysqli_real_escape_string($link,$_POST['login'])."' LIMIT 1");
    $data = mysqli_fetch_assoc($query);
    // Сравниваем пароли
    if($data['user_password'] === md5(md5($_POST['password'])))
    {
        // Генерируем случайное число и шифруем его
        $hash = md5(generateCode(10));
        // Записываем в БД новый хеш авторизации и IP
        mysqli_query($link, "UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");
        // Ставим куки
        setcookie("id", $data['user_id'], time()+60*60*24*30,"/");
        setcookie("hash", $hash, time()+60*60*24*30,"/"); // httponly !!!
        // Переадресовываем браузер на страницу проверки нашего скрипта
        header("Location: algoritm.php"); exit();
    }
    else
    {
        print "Вы ввели неправильный логин/пароль";
    }
  }
?>
Answer 1

Вынесите принятие решения о редиректе в отдельную функцию/класс/метод.

Как пример:

function getRedirectUri($role) {
  switch ($role) {
    case 'admin': return '/admin/dashboard';
    case 'moder': return '/admin/modertools';
    case 'user':  return '/feed';
    default: return '/';
  }
}
// ... //
$redirectUri = getRedirectUri($data['role']);
if ($redirectUri) {
  header("Location: $redirectUri");
  exit;
}
// ... //

Конкретные текстовые значения ролей лучше сделать константами класса(например, User).

READ ALSO
Вывод изображения в письме товара prestashop

Вывод изображения в письме товара prestashop

нужна помощь знатока prestashopВозможно есть где то информация или кто то может помочь, в том как можно вывести в письме (в котором выводиться...

100
Выполнение кода в определенный момент Java

Выполнение кода в определенный момент Java

Подскажите, как выполнить какой-то код, допустим, ровно в 18:00?

108