Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Вариант авторизации пользователей в шаблонизаторе (Дмитрий Пупкин)
Author Message
Дмитрий Пупкин
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sun Dec 31, 2006 1:42 am (написано за 9 минут 56 секунд)
   Post subject: Вариант авторизации пользователей в шаблонизаторе
Reply with quote

Здравствуйте,
У меня установлен шаблонизатор Templier.
Я хочу чтобы он мог в зависимости от уровня доступа пользователя показывать ему те или иные страницы/каталоги сайта.
Думаю для этого необходимо ввести дополнительный блок типа ##Visible (для примера). Ясно, что некоторой доработки требует компонент построения меню, "хлебных крошек". В поиске "образца для подражания" я стал анализировать коД компонента построения меню... В книге, к сожалению, ему уделено всего несколько строчек.
Вопросы:
1. Не является ли, то, что теперь "дизайнер" будет вправе управлять доступом к страницам/папкам сайта, некорректным?
2. Нет ли более простого способа организации ограничения доступа к страницам/папкам сайта?
3. Классы Subsys_Templier_Component и Subsys_Templier_Block(), на которые опирается Templier_Menu, явно лежат не на своих местах и я вообще не могу их найти...(((

Заранее спасибо, не сочтите вопросы за требование выложить готовое решение...
Back to top
Дмитрий Пупкин
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Jan 01, 2007 2:25 am (спустя 1 день 42 минуты; написано за 5 минут 42 секунды)
   Post subject:
Reply with quote

Я поступил так:
в классе Templier_Menu добавил переменную
Code (php): скопировать код в буфер обмена
var $visible = "visible";
Затем слегка дополнил функцию main
Code (php): скопировать код в буфер обмена
function main($params)
    {
        // Fetch arguments.
        if (isset (www.php.net/isset)($params['mask']))  $this->mask  = $params['mask'];
        if (isset (www.php.net/isset)($params['title'])) $this->title = strtolower (www.php.net/strtolower)($params['title']);
        if (isset (www.php.net/isset)($params['order'])) $this->order = strtolower (www.php.net/strtolower)($params['order']);
                if (isset (www.php.net/isset)($params['visible'])) $this->visible = strtolower (www.php.net/strtolower)($params['visible']);
        if (isset (www.php.net/isset)($params['uri']))   $this->uri   = $params['uri'];
        if (isset (www.php.net/isset)($params['recurrent']))  $this->recurrent = $params['recurrent'];
                $data1=Array (www.php.net/array)();
        $parent =& $this->templier->requestContext->getParent();
        $data = $this->_getElements($this->uri);
                for ($i=0; $i<count($data); $i++)
                {if($data[$i]['visible']==0)unset (www.php.net/unset)($data[$i]); else {}}
        return array (www.php.net/array)(
            "root"     => $parent->isRoot(),
            "elements" => $data,
                        );
    }
В функции _parseFile данного класса я добавил следующее:
Code (php): скопировать код в буфер обмена
        $bOrd = isset (www.php.net/isset)($blocks[$this->order])? $blocks[$this->order] : null;
        if ($bOrd && $bOrd->value === '') return;
               
                $bVis = isset (www.php.net/isset)($blocks[$this->visible])? $blocks[$this->visible] : null;
        if ($bVis && $bVis->value === '') return;
       
                $bgrayed = isset (www.php.net/isset)($blocks[$this->grayed])? $blocks[$this->grayed] : null;
        $result = array (www.php.net/array)(
            'context'  => $context->getDump(),
            'title'    => $blocks[$this->title]->value,
            'order'    => $bOrd? $bOrd->value : '',
                        'visible' => $bVis? $bVis->value : '',
            'grayed' => $bgrayed? $bgrayed->value : '',
        );
        return $result;
Мой новоиспечённый блок ##Visible прекрасно "признаётся" (смотрю в дебаГ-консоли). Правда он влияет на отображение только индексного файла (то есть есль в нём я ставлю ##Visible = 0, он пропадает из меню), а вот все остальные блоки (например гостевая, статьи) исчезать не хотят ((.
Помогите разобраться пожалуйста.
И ещё непонятнен следующий вопрос, если данный механизм заработает, то как же закрыть доступ к файлу не через меню, а через адресную строку... И вообще реализуемо ли это?
Заранее спасибо...
Ах да, всех с Новым Годом))
Back to top
Дмитрий Пупкин
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Jan 15, 2007 4:05 pm (спустя 14 дней 13 часов 40 минут; написано за 35 секунд)
   Post subject:
Reply with quote

Складывается впечатление, что я спросил нечто крайне глупое и дурацкое (((
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML