Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Система авторизации


Автор: Neznayka 7.11.2006, 01:27
Скажите на каком принципе можно построить авторизацию на доступ к файлам.
т.е.
Есть скрипт который отображает все папки и файлы в каталоге и осуществляет навигацию по нему.

Нужна просто логикак как можно построить авторизцию. Ну что б один человек имел доступ в 1 папку другой в другую и т.д.
Код

<?php
$path="./../root/";

function treeDir ($path)
{
     if (substr($path , strlen($path) - 1) != '/') {$path .= '/';}
     $dirlist = array();
     if ( $handle = opendir($path))
     {
          while (false !== ($file = readdir($handle )))
          {
               if ($file != '..')
               {
                    if (is_dir($path.$file)) {$arrDir[] = $file;}
                    if (is_file($path.$file)) {$arrFile[] = $file;}
               }
          }
          closedir ( $handle ) ;
     }
     return Array('Dir' => $arrDir, 'File' => $arrFile);
}



if ($_GET['fname']== true && $_GET['path']== true && $_GET['download']<1)


{

$arrDir= treeDir($_GET['path'].$_GET['fname']);
}

elseif ($_GET['fname']== true && $_GET['path']== true && $_GET['download']==1)
{
//$_GET['path'].$_GET['fname']
        header('Content-Disposition: attachment; filename='.$_GET['fname']);
$x = fread(fopen($_GET['path'].$_GET['fname'],"rb"), filesize($_GET['path'].$_GET['fname']));
    echo $x;
    die();
}
else
{
$arrDir = treeDir($path);
}
//endif;
?>
<?= '<?xml version="1.0"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
     <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
          <title>Вывод файлов</title>
     </head>
     <body>


<h3>Обзор папок директории</h3>
<hr>
<table>
<?php
if (($arrDir['Dir'])>0)
{
foreach ($arrDir['Dir'] as $_dir)
{
?>
    <tr>
        <td><img src="img/1.gif"></td>
        <td><?php echo '<a href="'.$SERVER['REQUEST_URI'].'?fname='.urlencode($_dir).'&path='.$path.'">'.$_dir.'</a><br />' ?> </td>
    </tr>
<?php
}
}
else
{
?>

        <tr>
            <td><img src="img/5.gif"></td>
            <td>Нет папок для отображения</td>
        </tr>
<?php
}
?>
</table>
<hr><h3>Обзор файлов директории <?php print $_GET['fname'] ?></h3>
<hr>
<table>
<?php
if (($arrDir['File'])>0)
{
foreach ($arrDir['File'] as $_file)
{
?>
    <tr>
        <td><img src="img/6.gif"></td>
        <td><?php echo '<a href="'.$SERVER['REQUEST_URI'].'?fname='.urlencode($_file).'&path='.$path.'&download=1" >'.$_file.'</a><br />'; ?></td>
    </tr>
<?php
}
}
else
{
?>
        <tr>
            <td><img src="img/5.gif"></td>
            <td>Нет файлов для отображения</td>
        </tr>
<?php
}
?>
</table><hr>
</body>
</html>

Автор: Nbuth 7.11.2006, 10:23
Neznayka, если тебе нужна логика, зачем код приводишь? Особо его не смотрел, но насколько понял, у тебя $path путь откуда начинается просмотр.
Отсюда и вся логика:
Хранишь где-ть корневую папку для каждого юзера/группы, начинаешь просмотр для него с "его" папки, и отслеживаешь, что б не пытался выйти на уровень выше (ниже думаю ему можно будет ходить, если нет, тоже проверяешь)

Автор: pythonwin 7.11.2006, 13:11
можешь просто запустить CGIHTTPServer и поставить аудентификацию и всё smile

Автор: albertn 7.11.2006, 13:20
Можешь поискать какой-нить движок, в котором уже реализованно разделение по провам доступа. Или тебе нужно именно самому сделать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)