Как я могу добавить новые параметры в эту функцию ограничения? - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть функция, которая ограничивает доступ к некоторым местам на моем сайте.В этом коде userGroup должен быть пользователем, чтобы человек мог перейти по ссылкам на сайте.Тем не менее, я недавно добавил userGroup 'vip', но они не могут получить доступ к ссылкам, потому что параметр, передаваемый в методе, является только 'user'.Я не совсем уверен, что мне нужно сделать, чтобы заставить его работать как с 'user', так и с 'vip' .... Но вот мой код:

Здесь вызывается метод $this->access->restrict('user');:

class MY_User extends MY_Controller {
    function MY_User() {
        parent::MY_Controller();

        // Protect the user area
        $this->access->restrict('user');

        // Don't want to cache this content
        $this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
        $this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
    $this->output->set_header("Pragma: no-cache");
    }
}

и передается в функцию restrict ():

function restrict($userGroup = FALSE)
{

    if($userGroup == 'logged_out')
    {
        if ($this->CI->user->id > 0)
        {
            redirect('user');
        }
    }
    else if($this->CI->user->id < 0)
    {
        $this->CI->session->set_flashdata('referrer', $this->CI->uri->uri_string());

        redirect();
    } else if($this->CI->user->userGroup != 'admin'){
        if ($userGroup AND $this->CI->user->userGroup !== $userGroup)
        {
            $this->CI->session->set_flashdata('referrer', $this->CI->uri->uri_string());
            redirect();
        }
    }
}

Я понимаю, что должен создать новый параметр в

 function restrict($userGroup = FALSE) 

и

$this->access->restrict('user'); 

но я не уверен, что делать после этого

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Я нашел решение!

Я изменил:

else if($this->CI->user->userGroup != 'admin'){
    if ($userGroup AND $this->CI->user->userGroup !== $userGroup)
    {
        $this->CI->session->set_flashdata('referrer', $this->CI->uri->uri_string());
        redirect();
    }
}

на:

    else if($this->CI->user->userGroup != 'admin'){
        if($this->CI->user->userGroup != 'vip'){
            if ($userGroup AND $this->CI->user->userGroup !== $userGroup)
            {
                $this->CI->session->set_flashdata('referrer', $this->CI->uri->uri_string());
                redirect();
            }
        }
    }

И второе решение, которое работает (спасибо nickb:

function restrict($userGroup = FALSE)
{

  if( $this->CI->user->id < 0)
{
    $this->CI->session->set_flashdata('referrer', $this->CI->uri->uri_string());
    return redirect();
}

if($userGroup == 'logged_out')
{
    if ($this->CI->user->id > 0)
    {
        redirect('user');
    }
}

switch($this->CI->user->userGroup)
{
    case 'vip':
    break;
    case 'user':
    break;
    case 'admin':
    break;
    default:
        $this->CI->session->set_flashdata('referrer', $this->CI->uri->uri_string());
            return redirect();
    break;
}
}
0 голосов
/ 14 ноября 2011

Я предполагаю, что вызов redirect означает, что вы хотите, чтобы функция на этом заканчивалась, поэтому я возвратил перенаправление (если по какой-либо другой причине вызов перенаправления не завершит функцию, а затем удалите return).

function restrict($userGroup = FALSE)
{
    if( $this->CI->user->id < 0)
    {
        $this->CI->session->set_flashdata('referrer', $this->CI->uri->uri_string());
        return redirect();
    }

    switch( $userGroup)
    {
        case 'logged_out':
            if( $this->CI->user->id > 0)
            {
                return redirect( 'user');
            }
        break;
        case 'vip':
        case 'user':
            if( !( $this->CI->user->userGroup == $userGroup))
            {
                $this->CI->session->set_flashdata('referrer', $this->CI->uri->uri_string());
                return redirect();
            }
        break;
        case 'admin':
            // Something - Maybe don't do anything?
        break;
        default:
            // Something ?
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...