Задать вопрос
humiliation
@humiliation
Чем больше знаю - тем больше дурак

Авторизация на сайте и права, как сделать?

Добрый день! Не так давно изучаю PHP, стараюсь писать хороший и поддерживаемый код. Сейчас я разрабатываю небольшую ЦРМ, основные части ее готовы, теперь я перешел к усложнению кода и переработке, так как мой код далек от идеального. Я самоучка, юниором сейчас устроиться проблема, более опытных наставников у меня нет, поэтому я к вам

Задача: модуль авторизации, проверки на вход, права доступа. Т.е. юзер1 не должен получить инфу от юзера2.

Что есть? Простая авторизация по связке логин-пароль, при обновлении страницы идет проверка на соответствие ид сессии к логину. Если нет сессии или не соответствует - выбрасывает на страничку логина. Записи имеют ключ сайта, логин имеет привязку к ключу.
Проблема возникла тогда, когда я тем же аяксом под логином сайта1 смог получить информацию сайта2. Понятное дело, что менеджеры интернет магазинов, с которыми я работаю, этого сделать не смогут, но мне это покоя не дает.

Вопрос: как определить права пользователей и не дать юзеру1 получить инфу юзера2. К чему привязываться, какие делать проверки, вводить переменные, как отойти от хардкода. Сейчас 3 юзера и все захардкодено в сессии, типа

if ($user1 == 'user1'){
$site = 'site.ru'};
  • Вопрос задан
  • 347 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
humiliation
@humiliation Автор вопроса
Чем больше знаю - тем больше дурак
Итак, кому интересно, я решил это так:

у юзера в таблице сразу прописаны права доступа ( в данном случае сайт или сайты).
этот ключ при логине помещается в переменную сессии, затем из бд вытаскиваются записи LIKE :site, где :site - тот самый ключ.
Доступ к другим сайтам запрещен через проверку во время извлечения -
isset($_POST['hidden']) && $permissions == 'root' && $_POST['hidden'] == 1. Пост нужен чтобы скрывать заказы в архив или прятать их с глаз. Без проверки на доступ постом можно было извлечь все спрятанные и не спрятанные записи.
Зелим Бельтоев советовал сделать во время записей проверку, я ее сделал чуть проще.
Отказавшись от метода выбора сайта постом у всех, кроме рута, я сразу решил и проблему доступа юзера1 к записям юзера2. Поэтому по его схеме сделана просто проверка при обновлении страницы. Ну вдруг что.

Всем спасибо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Madfisht3
$_SESSION["user"] будет доступна только одному пользователю, для которого эта сессия. В другой сессии другие значения $_SESSION.
При авторизации $_SESSION["user"] = username. Туда же можно записать и права полученные из бд при авторизации. $_SESSION доступна только на серверной части, в клиентской возможно получить только с разрешения серверной.
Пользователь1 получит информацию пользователя2 если при авторизации пользователь1 ввел логин и пароль, серверный скрипт сравнил md5 хэш пароля введенного с хэшем пароля соответствующего пользователя в бд, то авторизация прошла успешно. В переменную сессии пишешь нужные данные и используешь их на серверной части, клиент к этим переменным доступа не получает. Если нужны группы доступа, то в бд добавляешь поле с id группы или названием(как удобно) и при успешной авторизации пишешь в сешн группу пользователя.
Изучи стандартный механизм авторизации на сайтах и такие вопросы тебя не будут беспокоить.
Как то так, если я всё правильно понял.
Ответ написан
Ваш ответ на вопрос

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

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