2014-10-12 4 views
0

В моей группе Я установил, где я могу проверить или снять флажок с каждого имени контроллера, а затем щелкнуть на отправке и отправить имена в базу данных. В текстовом/массивном формате. И эти контроллеры я бы иметь доступ к иным следует, если попытаться получить доступ к этому контроллеру, который был снят бы получить перенаправлены в 'admin/error_permission'не перенаправляется, если у пользователя есть разрешение

Каждый пользователь имеет идентификатор группы пользователя рядом с идентификатором пользователя.

Как я смог получить имена моих контроллеров из базы данных, а затем их перенаправлять на моей странице ошибки, как так

Имя таблицы: user_group: колонны: user_group_id, имя, разрешение

имя столбца, в котором хранятся имена контроллеров является разрешение и имена контроллеров сохраняются как этот разрешенияa:2:{s:6:"access";a:1:{i:0;s:11:"column_left";}s:6:"modify";a:1:{i:0;s:11:"column_left";}}

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

function __construct() 
{ 
    parent::__construct(); 
    if (! $this->session->userdata('logged_in')) 
    { 
     // Allow some methods names from the database permission? 
     $allowed = array(

     ); 
     if (! in_array($this->router->fetch_method(), $allowed) 
     { 
      // Not Allowed Access 
      redirect('admin/error_permission'); 
     } 
    } 
} 
+0

Это выглядит как PHP [сериализованными массивов и объектов] (http://php.net/manual/en/function. serialize.php). Если Codeigniter сохранил их, у него, надеюсь, есть простой метод для их индивидуального вызова. Получение подробностей из MySQL с помощью запроса было бы довольно сложным. Он действительно должен быть полностью восстановлен PHP, а затем 'unserialized()' 'd, а Codeigniter должен иметь документированный путь. –

+0

О мальчик. Вы не можете получить индивидуальный ключ или значения из разрешения без unserializing = db не может вам помочь, вам нужно запросить & unserialize, найти имя. Это странно. Сохранение данных в сериализованной форме очень неэффективно с точки зрения дизайна базы данных (если только это не база данных sql, которая любит json.). Данные должны храниться в отдельных таблицах, отражающих их внутреннюю структуру. Это позволит легко отвечать на запросы. –

+0

Есть ли у вас какие-либо примеры несессиализации, чтобы иметь возможность получить то, что я получаю после –

ответ

0
$permissions = 'a:2:{s:6:"access";a:1:{i:0;s:11:"column_left";}s:6:"modify";a:1:{i:0;s:11:"column_left";}}'; 
$permissions_array = unserialize($permissions); 

var_dump($permissions_array); 

Выходы:

array(2) { 
    'access' => 
    array(1) { 
    [0] => 
    string(11) "column_left" 
    } 
    'modify' => 
    array(1) { 
    [0] => 
    string(11) "column_left" 
    } 
} 

if (false === array_key_exists($this->router->fetch_method(), $permissions_array)) 
{ 
      // Not Allowed Access 
      redirect('admin/error_permission'); 
} 
+0

ОК и какой запрос модели следует использовать? –

+0

pseudo SQL: 'SELECT-разрешение FROM user_group WHERE user_group_id = $ user [user_group_id] AND name = $ controllerName;'. Если у вас есть время, попробуйте избавиться от поля разрешенных сериализованных разрешений. Нормализация базы данных. Это позволяет выполнять более эффективные запросы. –