Доброго времени суток! 1. Имеется локальный сайт. На нем юзеры (работники фирмы) добавляют список купленных ими товаров для дальнейшей проверки сисадмином и бухгалтерией. 2. Вход на него осуществляется по связке Логин+Пароль+IP (вход по логину-паролю юзера только с конкретной машины юзера). 3. Юзеры могут добавлять товары, а так же видеть список добавленных товаров. Вопрос: Подскажите скрипт, с помощью которого можно разграничить права юзеров и администраторов. Т.е. админ может добавлять и видеть все добавленные товары, а юзер добавлять и видеть только добавленные им товары. P.S. Сайт сделан на PHP+MySQL. Буду благодарен, если выложите хотя бы небольшой пример, а не просто объяснение на словах и отсылку туда-то и туда-то. Заранее благодарю за помощь.
ээ, вы как бы описали весь алгоритм) 1 Пользователь логинится - заодно проверяем его права (добавляем в БД столбец с правами) 2 Если юзер админ выводим все, не админ - выводим только его PHP: if ($admin) $query="select * from tovar where 1=1"; else $query="select * from tovar where user_name='".mysql_real_escape_string($username)."'";
PHP: if (($login == $admin_login) and ($pass == $admin_pass)) { showall(...); } else show($user_id) простейший пример :-/
Нет, все равно не понял... 1. Юзер логинится на главной странице, код такой: Code: <?php include ('auth.php'); if (isset($_POST['auth_name'])) { $name=mysql_real_escape_string($_POST['auth_name']); $pass=mysql_real_escape_string($_POST['auth_pass']); $ip = $_SERVER['REMOTE_ADDR']; $query = "SELECT * FROM login WHERE nick='$name' AND pass='$pass' AND ip='$ip'"; $res = mysql_query($query) or trigger_error(mysql_error().$query); if ($row = mysql_fetch_assoc($res)) { session_start(); session_regenerate_id(); $_SESSION['usrname'] = $row['nick']; $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; } header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit; } if (isset($_GET['action']) AND $_GET['action']=="logout") { session_start(); session_destroy(); header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit; } if (isset($_REQUEST[session_name()])) session_start(); if (isset($_SESSION['usrname']) AND $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) return; else { echo " <form method='POST'> Логин:<br> <input type='text' name='auth_name'><br> Пароль:<br> <input type='password' name='auth_pass'><br><br> <input type='submit' value=Вход><br> </form> "; } exit; ?> 2. Потом его перекидывает на страницу вывода товаров, код такой: Code: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=KOI8-R" /> <?php $PageTitle = "Профиль"; ?> </head> <body> <span style="font-weight: bold;">Список товаров <a href="new-tovar.php">Добавить товар</a></span> <br> <br> <?php include ('auth.php'); /* Определяем количество сообщений на странице */ $lim = "20"; @$page = $_GET['page']; /* Меняем table на название вашей таблицы и не забываем указывать дополнительные параметры выборки (если они у вас есть) */ $res = mysql_query("SELECT COUNT(*) FROM tovar ORDER BY data"); $row = mysql_fetch_array($res); $posts = $row[0]; $str = ceil($posts/$lim); if(empty($page) or $page < 0) $page = 1; if($page > $str) $page = $str; $start = $page * $lim - $lim; /* Дальше подставляете свой код вывода данных из базы в цикле, но обязательно укажите LIMIT $start, $lim */ $result = mysql_query("SELECT data,name,harakter,srok,cena,kolichestvo,summa,kuda,provereno FROM tovar LIMIT $start, $lim",$db); $myrow = mysql_fetch_array($result); //теперь нам надо узнать сколько в массиве $result строчек, это делается так: $n=mysql_num_rows($result); //вывод на страничку, выводить будем в виде таблицы echo "<table border=1> <tr><th>Дата</th><th>Название</th><th>Характеристика</th><th>Гарант. срок</th><th>Цена</th><th>Кол-во</th><th>Сумма</th><th>Куда</th><th>Проверено</th></tr>"; // и теперь в цикле выводим построчно for($i=0;$i<$n;$i++) echo "<tr><td>",mysql_result($result,$i,data), "</td><td>",mysql_result($result,$i,name), "</td><td>",mysql_result($result,$i,harakter), "</td><td>",mysql_result($result,$i,srok), "</td><td>",mysql_result($result,$i,cena), "</td><td>",mysql_result($result,$i,kolichestvo), "</td><td>",mysql_result($result,$i,summa), "</td><td>",mysql_result($result,$i,kuda), "</td><td>",mysql_result($result,$i,provereno), "</td></tr>"; echo "</table>"; {printf ("<p>%s</p>",$myrow["title"]);} while ($myrow = mysql_fetch_array ($result)); /* Дальше все остается без изменений */ echo '<a href=?page='. ($page - 1) .'>Назад</a>**'; $i=1; while ($i <= $str) { if ($i==$page) {echo '<strong><a href=?page='.$i.'>'.$i.'</a></strong>*';} else {echo '<a href=?page='.$i.'>'.$i.'</a>*';} $i = $i+1; } echo '**<a href=?page='. ($page + 1) .'>Вперед</a>'; ?> </body> </html> Сделал так: Code: <?php include ('auth.php'); if (isset($_POST['auth_name'])) { $name=mysql_real_escape_string($_POST['auth_name']); $pass=mysql_real_escape_string($_POST['auth_pass']); $ip = $_SERVER['REMOTE_ADDR']; $query = "SELECT * FROM login WHERE nick='$name' AND pass='$pass' AND ip='$ip'"; [COLOR=DarkOrange]//В базе: all -админ, а пустое поле - обычный юзер if ($admin) $query="SELECT * FROM tovar WHERE group='all'"; else $query="SELECT * FROM tovar WHERE auth_name='".mysql_real_escape_string($name)."'";[/COLOR] $res = mysql_query($query) or trigger_error(mysql_error().$query); if ($row = mysql_fetch_assoc($res)) { session_start(); session_regenerate_id(); $_SESSION['usrname'] = $row['nick']; $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; } header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit; } if (isset($_GET['action']) AND $_GET['action']=="logout") { session_start(); session_destroy(); header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit; } if (isset($_REQUEST[session_name()])) session_start(); if (isset($_SESSION['usrname']) AND $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) return; else { echo " <form method='POST'> Логин:<br> <input type='text' name='auth_name'><br> Пароль:<br> <input type='password' name='auth_pass'><br><br> <input type='submit' value=Вход><br> </form> "; } exit; ?> И не работает... В чем ошибка? Я с этим только начал работать и учиться, поэтому не пинайте, а разьясните пожалуйста...