Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Авторизация разграничение прав и тд

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Триган
Отправлено: 05 Декабря, 2013 - 21:16:14
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




Сильно подозреваю что подобная тема поднималась здесь, и не раз обмуссоливалась но через поисковик я здесь ничего дельного найти не смог, поэтому прошу сильно не ругаться. Пишу авторизацию с разграничением привелегий админ и пользователь, естественно некоторые функции от простого пользователя должны быть скрыты. В гугле нарыл session_start();, подскажитие какими ещё функциями для такого дела воспользоваться, какие есть подводные камни в общем поделитесь знаниями так сказать.
 
 Top
DelphinPRO
Отправлено: 05 Декабря, 2013 - 21:30:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




в простейшем случае заведите в таблице пользователей дополнительное поле с правами доступа: 1 - admin, 0 - user.
Потом все сведется к простой проверке
PHP:
скопировать код в буфер обмена
  1. if ($user['rights']) { echo 'Admin'; }
  2. else { echo 'user'; }


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
AmsTaFF
Отправлено: 06 Декабря, 2013 - 08:33:06
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




ищите лучше, есть миллион скриптов авторизации, с комментами. Есть гайды как писать авторизацию...
 
 Top
Триган
Отправлено: 06 Декабря, 2013 - 10:10:45
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




AmsTaFF пишет:
ищите лучше, есть миллион скриптов авторизации, с комментами. Есть гайды как писать авторизацию...

Это да, их достаточно много но я не хочу брать готовый код, мне бы понять как это работает
 
 Top
AmsTaFF
Отправлено: 06 Декабря, 2013 - 10:25:25
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




так посмотрите как там все написано, в гайдах скорее всего описано почему именно так, а не по-другому. Посмотрите какие там функции используются, изучите их. Например посмотрите что такое сессия (Session), всякие хэши (md5(), sha1() и прочие) для паролей (может быть сейчас не используются уже, но раньше частенько использовались). При изучении кода у вас появятся вопросы "А зачем? А почему? А почему так, а не по-другому?", эти вопросы можно задать гуглу, если там нету ответа - тут подскажут.
 
 Top
caballero
Отправлено: 06 Декабря, 2013 - 11:20:19
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Триган

а что именно там непонятного
если админ выводишь одно если нет - другое

обычный if else

так все скрипты и устроены

или потрудись описать что конкретно ты хочешь разграничивать


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Триган
Отправлено: 06 Декабря, 2013 - 12:08:43
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




caballero пишет:
Триган

а что именно там непонятного
если админ выводишь одно если нет - другое

обычный if else

так все скрипты и устроены

или потрудись описать что конкретно ты хочешь разграничивать

На самом деле очень много вопросов, и даже не знаю что первое спрашивать
Итак с авторизацией я разобрался, такой вопрос:
Вот я авторизовался на сайте, переходя на другие страницы этого же сайта я остаюсь авторизованным или на всех страницах сайта нужно прописывать сессию?
На счёт разграничения:
Нужно что бы админу были видны некоторые пункты в меню а простому юзеру нет
Завёл в бд ещё одно поле, если админ то стоит 1 если просто юзер то 0. Вот допустим авторизовался админ, я проверяю если в поле стоит 1 то ..... и вот тут вообще ничего не ясно.
На словах то понятно что если 1 то показать пункт в меню если 0 то не показывать, а как реализовать это, я совсем не представляю.
 
 Top
DelphinPRO
Отправлено: 06 Декабря, 2013 - 12:20:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Триган пишет:
Вот я авторизовался на сайте, переходя на другие страницы этого же сайта я остаюсь авторизованным или на всех страницах сайта нужно прописывать сессию?

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


Триган пишет:
Вот допустим авторизовался админ, я проверяю если в поле стоит 1 то ..... и вот тут вообще ничего не ясно.
На словах то понятно что если 1 то показать пункт в меню если 0 то не показывать, а как реализовать это, я совсем не представляю


Что может быть проще конструкции if..else ?
Поясните конкретнее, что именно в данном моменте не понятно


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Триган
Отправлено: 06 Декабря, 2013 - 17:40:03
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
Триган пишет:
Вот я авторизовался на сайте, переходя на другие страницы этого же сайта я остаюсь авторизованным или на всех страницах сайта нужно прописывать сессию?

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


Триган пишет:
Вот допустим авторизовался админ, я проверяю если в поле стоит 1 то ..... и вот тут вообще ничего не ясно.
На словах то понятно что если 1 то показать пункт в меню если 0 то не показывать, а как реализовать это, я совсем не представляю


Что может быть проще конструкции if..else ?
Поясните конкретнее, что именно в данном моменте не понятно


Если совсем конкретно то вот
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     $link = mysql_connect('localhost', 'root');
  3. $db_selected = mysql_select_db('matan', $link);
  4. mysql_query("set names 'utf8'");
  5. $result=mysql_query("Select * From chelreg ");
  6. $myrow=mysql_fetch_array($result);
  7. $admin=$_POST['1'];
  8. do
  9.  if ((isset($_SESSION['auth']) and $admin==$myrow["admin"]))
  10.  {
  11.      echo '<li><a href="#">Начать тест</li></a>';
  12.      echo '<li><a href="#">Личный кабинет</li></a>';
  13.      echo '<li><a href="#">Статистика</li></a>';
  14.     }
  15.     else
  16.     {
  17.     echo '<div class="descr"><li><a href="#">Начать тест</li></a></div>';
  18.     echo '<div class="descr"><li><a href="#">Личный кабинет</li></a></div>';
  19.     echo '<div class="descr"><li><a href="#">Статистика</li></a></div>';
  20.       }
  21.       while($myrow=mysql_fetch_array($result));
  22.       ?>


Простую проверку на авторизацию проходит, т е если чел не авторизован то 3 пункта меню он не видет, если авторизован то видит. Добовляю проверку на админа и ничего не получается, не могу найти ошибку
 
 Top
Триган
Отправлено: 08 Декабря, 2013 - 12:30:03
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  <?PHP
  2. $link = mysql_connect('localhost', 'root');
  3. $db_selected = mysql_select_db('matan', $link);
  4. mysql_query("set names 'utf8'");
  5. $result=mysql_query("Select * From chelreg ");
  6. $myrow=mysql_fetch_array($result);
  7. do
  8.  if ((isset($_SESSION['auth']) and $myrow['admin']==1))
  9.     {
  10.      echo '<li><a href="#">Начать тест</li></a>';
  11.      echo '<li><a href="#">Личный кабинет</li></a>';
  12.      echo '<li><a href="#">Статистика</li></a>';
  13.     }
  14.     elseif ((isset($_SESSION['auth']) and $myrow['admin']==0))
  15.     {
  16.     echo '<li><a href="#">Начать тест</li></a>';
  17.     echo '<li><a href="#">Личный кабинет</li></a>';
  18.     echo '<div class="descr"><li><a href="#">Статистика</li></a></div>';
  19.     }
  20.     else
  21.     {
  22.     echo '<div class="descr"><li><a href="#">Начать тест</li></a></div>';
  23.     echo '<div class="descr"><li><a href="#">Личный кабинет</li></a></div>';
  24.     echo '<div class="descr"><li><a href="#">Статистика</li></a></div>';
  25.     }
  26.       while($myrow=mysql_fetch_array($result));
  27.       ?>


Помогите найти ошибку) Должно быть типо если человек авторизован и в поле админ стоит 1 то все три надписи видны, если в админ - 0 то 2 надписи видны, если не авторизован то все 3 надписи не видны
 
 Top
DelphinPRO
Отправлено: 08 Декабря, 2013 - 16:50:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)





1. Что за таблица chelreg? По названию нифига не ясно... (это, кстати, минус)
2. Если это пользователи, то зачем вытаскивать их всех?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 08 Декабря, 2013 - 17:01:54
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
chelreg

зарегистрированые человеки ?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Триган
Отправлено: 08 Декабря, 2013 - 17:02:52
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
1. Что за таблица chelreg? По названию нифига не ясно... (это, кстати, минус)
2. Если это пользователи, то зачем вытаскивать их всех?

Да это таблица где хранятся данные пользователей, имя, фамилия, и тд. В том числе там поле admin с записями типа 1 и 0. Я ставил там конкретное поле админ Select admin From chelreg. И ничего это не меняет, условие работает не правильно, не реагирует на проверку админа
(Добавление)
caballero пишет:
Цитата:
chelreg

зарегистрированые человеки ?

Да
 
 Top
DelphinPRO
Отправлено: 08 Декабря, 2013 - 17:16:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Триган пишет:
зарегистрированые человеки
обычно ее называют users Улыбка

Вам не нужно вытаскивать всех "человеков". Тащите из базы только того, кто запросил страницу.

Потом напишите функцию вывода пунтка меню, например так

PHP:
скопировать код в буфер обмена
  1. /* $rights:
  2.  * 0 - незарегистрированный пользователь
  3.  * 1 - зарегистрированный пользователь
  4.  * 2 - администратор
  5.  */
  6. function printMenuItem($user, $title, $link, $rights = 0) {
  7.     if ($user['admin'] >= $rights) {
  8.         echo '<li><a href="' . $link . '">' . $title . '</li></a>';
  9.     }
  10. }


Тогда выводить меню станет просто

PHP:
скопировать код в буфер обмена
  1. //Для лучшего восприятия определим константы:
  2. define( 'ACL_PUBLIC', 0 );
  3. define( 'ACL_REGISTERED', 1 );
  4. define( 'ACL_ADMIN', 2 );
  5.  
  6. printMenuItem($user, 'Начать тест', '#', ACL_PUBLIC); // Показываем всем
  7. printMenuItem($user, 'Личный кабинет', '#', ACL_REGISTERED); // Показываем зарегистрированным
  8. printMenuItem($user, 'Статистика', '#', ACL_ADMIN); // Показываем админу


$user - это массив с данными текущего пользователя. Вы его получите из базы, если юзер авторизован, либо сформируете сами для гостей, с данными по умолчанию.

(Отредактировано автором: 08 Декабря, 2013 - 17:17:59)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Триган
Отправлено: 08 Декабря, 2013 - 18:52:20
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
Триган пишет:
зарегистрированые человеки
обычно ее называют users Улыбка

Вам не нужно вытаскивать всех "человеков". Тащите из базы только того, кто запросил страницу.

Потом напишите функцию вывода пунтка меню, например так

PHP:
скопировать код в буфер обмена
  1. /* $rights:
  2.  * 0 - незарегистрированный пользователь
  3.  * 1 - зарегистрированный пользователь
  4.  * 2 - администратор
  5.  */
  6. function printMenuItem($user, $title, $link, $rights = 0) {
  7.     if ($user['admin'] >= $rights) {
  8.         echo '<li><a href="' . $link . '">' . $title . '</li></a>';
  9.     }
  10. }


Тогда выводить меню станет просто

PHP:
скопировать код в буфер обмена
  1. //Для лучшего восприятия определим константы:
  2. define( 'ACL_PUBLIC', 0 );
  3. define( 'ACL_REGISTERED', 1 );
  4. define( 'ACL_ADMIN', 2 );
  5.  
  6. printMenuItem($user, 'Начать тест', '#', ACL_PUBLIC); // Показываем всем
  7. printMenuItem($user, 'Личный кабинет', '#', ACL_REGISTERED); // Показываем зарегистрированным
  8. printMenuItem($user, 'Статистика', '#', ACL_ADMIN); // Показываем админу


$user - это массив с данными текущего пользователя. Вы его получите из базы, если юзер авторизован, либо сформируете сами для гостей, с данными по умолчанию.


До меня не доходит как это работает, ну в сущности и не работаетОгорчение . Если гость то норм выдаёт "начать тест", а при всём остальном не работает, скорее всего я неправильно формирую массив user
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB