1

Тема: Проверка на права доступа

Есть ли какая-то функция, которая определяет, есть ли у текущего пользователя права для просмотра страницы?

teapplix.com

2

Re: Проверка на права доступа

Это система делает автоматически, если нет доступа то выводит ошибку.

Thumbs up Thumbs down

3 Отредактировано zloitapok (08-02-2010 16:17:15)

Re: Проверка на права доступа

Я это знаю. Мне нужно для другого

Есть код:
        <!-- Выборка страниц из категории 42, лимит 6 -->
        <ul>
        {foreach category_pages(42, 6) as $page}
            <li>
                <h5 align="center">
                    <a href="{site_url($page.full_url)}" title="{$page.title}">{$page.title}</a>
                </h5>   
                <p align="center">               
                    <a href="{site_url($page.full_url)}" title="{$page.title}">
                        <img src="{site_url($image.thumb)}" alt="{$page.title}" />
                    </a>
                </p>   
            </li>
        {/foreach}
        </ul>
Надо ввести проверку на наличие прав просмотра каждой страницы и не выводить как элемент списка те страницы, прав на просмотр которых нет у текущего залогиненого пользователя или гостя.

Сейчас страницы выводятся и только при попытке перехода на выбраннуб страницу появляется сообщение об отсутствии прав. А надо чтоб в таком случае страница не выводилась в этом списке вообще

teapplix.com

4 Отредактировано admin (08-02-2010 16:25:44)

Re: Проверка на права доступа

Ну тут один вариант:

сделай в своем шаблоне файл functions.php и скопируй в него код функции category_pages, ну и назови например my_category_pages, это для того чтобы при обновлении код не пропал.

далее к запросу в функции my_category_pages допиши

$this->db->select('content.*');
$this->db->join('content_permissions','content_permissions.page_id = content.id', 'left');

и создай еще одну функцию для проверки прав:

    function MY_page_access($roles)
    {
        $ci = get_instance();
       

        if ($roles == FALSE OR count($roles) == 0) return TRUE;

        $access = FALSE;

        $logged = $ci->dx_auth->is_logged_in();
        $my_role = $ci->dx_auth->get_role_id();
    
        if($ci->dx_auth->is_admin() === TRUE)
            $access = TRUE;

        // Check roles access
        if ($access != TRUE)
        {
            foreach($roles as $role)
            {
                if($role['role_id'] == $my_role)
                    $access = TRUE;

                if($role['role_id'] == '0')
                    $access = TRUE;
            }
        }

        if($access == FALSE)
        {
                   // no access
                   return FALSE;
        }

далее в шаблоне

 {foreach category_pages(42, 6) as $page}
  {if   MY_page_access($page.roles) == TRUE}
            <li>
                <h5 align="center">
                    <a href="{site_url($page.full_url)}" title="{$page.title}">{$page.title}</a>
                </h5>    
                <p align="center">                
                    <a href="{site_url($page.full_url)}" title="{$page.title}">
                        <img src="{site_url($image.thumb)}" alt="{$page.title}" />
                    </a>
                </p>    
            </li>
   {/if}
  {/foreach}

ну как-то так. и еще все $this нужно заменить на $ci. ($ci = get_instance();)

Thumbs up Thumbs down

5 Отредактировано zloitapok (08-02-2010 16:55:45)

Re: Проверка на права доступа

Ок, спасибо. Было бы хорошо Сделать какое-то свойство у $page типа: $page.haverigths с возможными значениями тру и фолс. Значения определяются так же как у функции MY_page_access($page.roles). Задача проверки прав в виджете довольно тривиальная.

teapplix.com

6 Отредактировано zloitapok (14-02-2010 18:02:15)

Re: Проверка на права доступа

Все сделал. Пришлось поковырятся, но все работает )

Только я не верно написал чего хотел. Я хотел не "выбрать n записай и вывести только те из них, к которым есть доступ", а "выбрать и вывести n записей к которым есть доступ из общего числа". Чтоб на выходе было n записей с правами на доступ, а не n минус к-во записей, к которым доступа нет.

teapplix.com