Скрипт разделения прав пользователей

Discussion in 'PHP' started by alpotemkin, 9 Apr 2009.

  1. alpotemkin

    alpotemkin Elder - Старейшина

    Joined:
    7 May 2008
    Messages:
    57
    Likes Received:
    1
    Reputations:
    0
    Доброго времени суток!

    1. Имеется локальный сайт. На нем юзеры (работники фирмы) добавляют список купленных ими товаров для дальнейшей проверки сисадмином и бухгалтерией.

    2. Вход на него осуществляется по связке Логин+Пароль+IP (вход по логину-паролю юзера только с конкретной машины юзера).

    3. Юзеры могут добавлять товары, а так же видеть список добавленных товаров.

    Вопрос:
    Подскажите скрипт, с помощью которого можно разграничить права юзеров и администраторов.
    Т.е. админ может добавлять и видеть все добавленные товары, а юзер добавлять и видеть только добавленные им товары.


    P.S. Сайт сделан на PHP+MySQL. Буду благодарен, если выложите хотя бы небольшой пример, а не просто объяснение на словах и отсылку туда-то и туда-то.

    Заранее благодарю за помощь.
     
    #1 alpotemkin, 9 Apr 2009
    Last edited: 9 Apr 2009
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ээ, вы как бы описали весь алгоритм)

    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)."'";
     
    _________________________
  3. MuXaJIbI4

    MuXaJIbI4 Member

    Joined:
    20 Nov 2008
    Messages:
    66
    Likes Received:
    7
    Reputations:
    0
    where 1=1 писать нет необходимости
     
  4. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    PHP:
    if (($login == $admin_login) and ($pass == $admin_pass))
    {
       
    showall(...);
    }
    else
       
    show($user_id)
    простейший пример :-/
     
    #4 awdrg, 9 Apr 2009
    Last edited: 9 Apr 2009
  5. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    if($ip==ADMIN_IP){...}else{...}
     
  6. alpotemkin

    alpotemkin Elder - Старейшина

    Joined:
    7 May 2008
    Messages:
    57
    Likes Received:
    1
    Reputations:
    0
    Нет, все равно не понял... :(

    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'>
    &nbsp;Логин:<br>
    &nbsp;<input type='text' name='auth_name'><br>
    &nbsp;Пароль:<br>
    &nbsp;<input type='password' name='auth_pass'><br><br>
    &nbsp;<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;">Список товаров&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp; <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'>
    &nbsp;Логин:<br>
    &nbsp;<input type='text' name='auth_name'><br>
    &nbsp;Пароль:<br>
    &nbsp;<input type='password' name='auth_pass'><br><br>
    &nbsp;<input type='submit' value=Вход><br>
    </form>
    ";
    }
    exit;
    
    ?>
    
    И не работает... В чем ошибка? Я с этим только начал работать и учиться, поэтому не пинайте, а разьясните пожалуйста...
     
    #6 alpotemkin, 9 Apr 2009
    Last edited: 13 Apr 2009