Задать вопрос
@Yen13Sky
Студент

Вход в систему под разными ролями на разные url, как сделать?

есть таблицы users, где хранится логин, пароль и роли ( роль = 0 - user, роль = 1 - admin).
для каждой роли есть свой URL : для user - index2.php, для admin - admin.php.
Т.к. я делаю это в первый раз, то прочитав кучу сайтов, получилось сделать только вот это:
spoiler
require "db.php";
$data = $_POST;
if (isset($data['do_login']))
{
    $errors = array();
    $user = R::findOne('users', 'login=?', array($data['login']));

    if ($user) {
        if (password_verify($data['password'], $user->password))
        {

            if ($data ['role'] == 0 ) {

                header('location: index2.php');

            } else {

                header('location: admin.php');
            }
        }
        else{
            $errors[] = "Неверно введён пароль!";
        }
        }

}
?>

так же прикрепляю код со страницы регистрации:
spoiler
<?php

require "db.php";

$data = $_POST;
if( isset($data['do_signup'])){
    if (trim($data['login']) == ''){
        $errors[] = 'Введите ФИО нового сотрудника!';
    }
    if (trim($data['identificational']) == ''){
        $errors[] = 'Введите идентификационный сотрудника!';
    }
    if (trim($data['role']) == ''){
        $errors[] = 'Введите привелегию сотрудника!';
    }
    if (trim($data['email']) == ''){
        $errors[] = 'Введите E-mail!';
    }
    if ($data['password'] == ''){
        $errors[] = 'Введите пароль!';
    }
    if (R::count('users', "identificational = ?", array($data["identificational"])) >0)
    {
        $errors[] = "Пользователь с таким идентификационным номером уже существует!";
    }
    if (R::count('users', "email = ?", array($data["email"])) >0)
    {
        $errors[] = "Пользователь с таким E-mail уже существует!";
    }

    if (empty($errors))
    {
        $user = R::dispense('users');
        $user->login = $data['login'];
        $user->identificational = $data['identificational'];
        $user->role = $data['role'];
        $user->email = $data['email'];
        $user->password = password_hash($data['password'], PASSWORD_DEFAULT);

        R::store($user);
        echo '<div style="color: green;">Вы успешно зарегестрированы!</div><hr>';

    } else{
        echo '<div style="color: red">'.array_shift($errors).'</div><hr>';
    }
}

?>
<form action="signup.php" method="post">
    <p><strong>ФИО сотрудника</strong>
        <input type="text" name="login" value="<?php echo @$data ['login'];?>">
    </p>
    <p><strong>Идентификационный сотрудника</strong>
        <input type="number" name="identificational" value="<?php echo @$data ['identificational'];?>">
    </p>
    <p><strong>Привилегия сотрудника</strong>
        <input type="number" name="role" value="<?php echo @$data ['role'];?>">
    </p>
    <p><strong>E-mail сотрудника</strong>
        <input type="email" name="email" value="<?php echo @$data ['email'];?>">
    </p>
    <p><strong>Пароль для входа в систему</strong>
        <input type="password" name="password" value="<?php echo @$data ['password'];?>">
    </p>
    <p>
        <button type="submit" name="do_signup">регистрация нового сотрудника</button>
    </p>

</form>

  • Вопрос задан
  • 222 просмотра
Подписаться 2 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
solotony
@solotony
покоряю пик Балмера
примерная схема обработки должна быть такая:

1) аутентификация - на этом шаге вы проверяете залогинен ли пользователь
2) роутинг - здесь вы принимаете решение (на основании URL, переданных параметров, пользователя) какой обработчик будет использован
3) авторизация - проверка прав доступа к обработчику, к объектам
4) обработка

при этом ошибка/редирект должен быть только в том случае, когда вы вываливаетесь из этой схемы - например роутер не находит нужного пути, пользователь не залогинен, недостаточно прав.

а в иных случаях (нормальной обработки) редирект делать не следует
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы