Ограничить некоторые действия, функция _remap, CodeIgniter - PullRequest
1 голос
/ 05 декабря 2010

Я хочу сделать некоторые действия доступными только для зарегистрированных пользователей.Я пытался ограничить некоторые этим кодом:

function _remap($method)
    {
        $restricted = array('update_rating', 'delete_post');
        if( ! $this->session->userdata('logged_in') && in_array($method, $restricted))
        {
           echo 'Log in, please'; 
        }
        else {
           $this->$method();
        }
    }

Но метод $ this -> $ () не получил параметры, которые были отправлены в URL.Что делать? Я хочу сделать некоторые действия доступными только для зарегистрированных пользователей.

Ответы [ 3 ]

2 голосов
/ 09 декабря 2010

В идеале вы не должны использовать этот шаблон разработки для создания логина пользователя. Вы должны просто выполнить проверку в конструкторе класса, который вы вызываете, и использовать метод $ this-> router->, чтобы увидеть, к какому методу пытается обратиться пользователь. Сравните это с массивом методов, требующих входа в систему, а затем проверьте, вошел ли пользователь в систему или нет. Если одно из условий ложно, перенаправить на страницу входа или продолжить выполнение вызова. Пример реализации ниже:

Class XYZ extends Controller{

    function __construct() {
        parent::controller();
        $protected_methods = array('method_1', 'method_2');

        if(in_array($this->router->method, $protected_methods)){
            // check if user is logged in
            if(!$this->session->userdata('logged_in'))
                redirect('/login');
        }
    }

}
2 голосов
/ 09 декабря 2010

Чтобы ограничить количество зарегистрированных пользователей для всего контроллера, используйте что-то вроде:

function __construct(){

  if(!is_logged_in){
    redirect('user/login');
  }

}

Или сделайте то же самое, если вам нужно ограничить определенный метод:

function restricted_function(){

   if(!is_logged_in){
     redirect('user/login');
   }

 }

Для этого необходимо, чтобы перед вызовом контроллера была установлена ​​переменная is_logged_in.

Я использую MY_controller, который проверяет вошедший в систему сеанс, который наследуют все контроллеры.

1 голос
/ 06 декабря 2010

Вы не отправили ему никаких параметров.

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

function _remap($method)
{
    $restricted = array('update_rating', 'delete_post');
    if( ! $this->session->userdata('logged_in') && in_array($method, $restricted))
    {
       echo 'Log in, please'; 
    }
    else
    {
        $params = get_func_get_args();
        $this->$method($params);
    }
}

Обратите внимание, что методы теперь будут получать имассив параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...