Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Авторизация в несколько уровней!
 
 автор: Sywooch   (20.04.2006 в 17:26)   письмо автору
 
 

Подскажите как можно устроить авторизацию пользователей в несколько уровней.
Хочу попробовать форум написать :)

Нужно чтот типа:

Админ
Модератор
Юзер
Гость

Использовать буду MySQL

   
 
 автор: WebTech   (20.04.2006 в 17:55)   письмо автору
 
   для: Sywooch   (20.04.2006 в 17:26)
 

Заводишь таблицу для юзеров и в этой таблице, кроме обычных полей (ник, логин, пароль и т.д.), размещаешь дополнительное поле, которое называешь, что-нибудь типа priv. В это поле и записываешь, кем является юзер: админом, модератором, юзером или гостем. Затем после авторизации пользователя на сайте смотришь это поле и разрешаешь этому пользователю делать то, что ему разрешено.
Например, если пользователь авторизовался и в поле priv у него записано "Админ", то ему можно делать все что угодно :-), если "Гость", то ничего :)

   
 
 автор: Sywooch   (20.04.2006 в 18:04)   письмо автору
 
   для: WebTech   (20.04.2006 в 17:55)
 

Это я и сам понимаю!
Я не вкурсе как авторизовывать посетителей и как разграничить им привилегии?

   
 
 автор: WebTech   (20.04.2006 в 18:59)   письмо автору
 
   для: Sywooch   (20.04.2006 в 18:04)
 

Авторизация. Посетитель вводит логин и пароль и если они совпадают с имеющимися в базе данных, то этому посетителю разрешено что-то делать (в соответствии с его привилегиями).
Чтобы пользователь оставался авторизованным при переходе со страницы на страницу можно использовать сессии или куки или еще что... :-)
Разграничение привилегий происходит при попытке выполнить какое-либо действие. Например, если после авторизации выяснилось, что посетитель - Админ, то возле каждого поста имеется ссылка Удалить, ну, или что-то типа этого. У Гостя нет такой ссылки. Или например при нажатии кнопки удалить, проверяется привилегия пользователя. Если это Админ, то удаление происходит, если Гость, то выводится сообщение с запретом... Ну и т.д.

   
 
 автор: Sywooch   (20.04.2006 в 23:08)   письмо автору
 
   для: WebTech   (20.04.2006 в 18:59)
 

И снова теория :(

   
 
 автор: WebTech   (21.04.2006 в 17:26)   письмо автору
 
   для: Sywooch   (20.04.2006 в 23:08)
 

Ленишься сам думать и писать ;-)

Можно примерно так.

Допустим таблица с юзерами имеет примерно следующую структуру:

CREATE TABLE users 
(
user_id int(10) not null unsigned auto_increment primary key,
login varchar(20) not null,
password varchar(20) not null,
nick varchar(20) not null,
priv enum('admin', 'moderator', 'user', 'guest') not null default 'guest'
)


Скрипт для авторизации будет примерно такой

<?php
// авторизация 

include 'db_connect.php'// скрипт подключения к базе данных

session_start(); //  начинаем сразу сессию

// получаем значения логина и пароля из формы
$login mysql_escape_string($_POST['login']);
$password mysql_escape_string($_POST['password']);

// проверяем наличие переданных логина и пароля в базе данных
$res mysql_query('select login, password, nick 
                    from users 
                    where login="'
.$login.'" and password="'.$password.'"');
$num mysql_num_rows($res);
if (
$num == 0)
  {
  echo 
'Неверный логин и/или пароль!';
  exit;
  }
$nick mysql_result($res0'nick'); // выбираем ник из базы данных

// записываем переменные сессии
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;

echo 
'Привет '.$nick.'!';
?>


Далее на каждой странице в начале (после подключения к базе естественно) размещаешь фрагмент кода

<?php
session_start
();

$login mysql_escape_string($_SESSION['login']);
$password mysql_escape_string($_SESSION['password']);

// проверяем логин и пароль из переменных сессии на наличие в базе данных
$res mysql_query('select login, password 
                    from users 
                    where login="'
.$login.'" and password="'.$password.'"');
$num mysql_num_rows($res);
if (
$num == 0)
  {
  echo 
'Ошибка авторизации!';
  exit;
  }
$priv mysql_result($res0'priv'); // получаем привилегии

if ($priv == 'admin')
  {
  
// скрипт с действиями разрешенными для админа
  
}
if (
$priv == 'moderator')
  {
  
// скрипт с действиями разрешенными для модератора
  
}
// и т.д.
?>

   
 
 автор: gentooshnik   (21.04.2006 в 18:06)   письмо автору
 
   для: WebTech   (21.04.2006 в 17:26)
 

для начала надо определить какие статусы пользователей, и с какими правами
будут (или хочешь) существовать в твоём форуме, потом пляшешь от создания таблиц в БД
заканчивая выводом информации.

Довольно таки обширная тема, не ограничивающаяся одним-пятью постами...

   
 
 автор: Sywooch   (22.04.2006 в 01:30)   письмо автору
 
   для: gentooshnik   (21.04.2006 в 18:06)
 

WebTech ты прав. Лентяюга страшный :)
Но иногда пока дождусь ответа, отвечаю сам!
В данном случае непонимаю с чего начать :)
Правда уже понял!....

   
 
 автор: Halfi   (22.04.2006 в 18:18)   письмо автору
 
   для: WebTech   (21.04.2006 в 17:26)
 

У меня с базой не выходит, в 5 мускуле примари по другому выставляется
CREATE TABLE 'users' (
'user_id' INT( 10 ) NOT NULL AUTO_INCREMENT ,
'login' VARCHAR( 20 ) NOT NULL ,
'password' VARCHAR( 20 ) NOT NULL ,
'nick' VARCHAR( 20 ) NOT NULL ,
'priv' ENUM( 
'admin',
'moderator',
'user',
'guest'
)  DEFAULT 'guest' NOT NULL ,
PRIMARY KEY ( 'user_id' ) 


   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования