2013-02-17 3 views
0

Я использую codeigniter. У меня уже есть уровни доступа разрешений php и mysql с использованием сеансов. Я хочу ограничить страницы, которые можно просмотреть зарегистрированным администратором, в зависимости от его уровня доступа. У меня есть в базе данных для каждого администратора (каждый id_relation является для администратора), как изображение:Ограниченный доступ к административной области по php

enter image description here

Каждый из этого числа в приведенной выше таблице базы данных является страница, например: (значения подстраниц и столбцы сервисные json)

в Главном: 1 является page 1, 3 является page 3, 5 является page 5 и ...

PHP: (Я пробовал)

$result = $this->db->get_where('access_level', array('id_relation'=>'6572242cc91f61b2f722e31ec55e3c7c')); 
$data = array(); 
foreach($result->result() as $row){ 
    $data[] = $row->mainpage;  
} 

if(in_array('1', $data)){ 
    echo 'access'; 
}else{ 
    echo 'not access'; 
} // out put is access 

Теперь Как установить разрешения для subpage для три подряда, которые имеют mainpage 1 для собственных страниц? например, в приведенной выше базе данных.

В ид 1 пользователя в mainpage имеет доступ к странице 1 и в этом MainPage (страницы 1) он имеет доступ к страницам 3, 4, 6 в субстранице и в каждом из подстраниц он имеет доступ к службе 110. (Они соединены вместе как цепь.)

Это также для остальных строк. Мой HTML как: http://jsfiddle.net/pbNt3/ и мой PHP для данных вставки как: http://pastebin.com/HpztqSwV

Как разрешить пользователю доступ к любой из страниц (MainPage и ВложенныеСтраницы) и услуг в нем подстраниц РНР?

+1

Если вы храните массивы в своей базе данных, вы, вероятно, ошибаетесь. –

+0

@ Waleed Khan - Что не так? мой html выглядит так: http://jsfiddle.net/pbNt3/, а мой php для данных вставки: http://pastebin.com/HpztqSwV –

+1

Чтобы расширить комментарий @ WaleedKhan: вы должны предпочтительно использовать отдельную перекрестную ссылку таблицы для полей, в которых вы храните данные массива. – Abhilash

ответ

0

Как насчет запуска запросов к вашей базе данных, чтобы увидеть, если что-то возвращается из WHERE = 1. Главная

Пример:

SELECT...... 
FROM........ 
WHERE (your database flag) = .......... 

У меня есть один и тот же набор на моем приложении. У меня 3 роли, студент, штат, админ. Затем я использую инструкции if else. Теперь из моего понимания вашей БД только занавески имеют доступ к страницам, подстраницам и сервису. Это может быть сделано только путем простого запроса и увидеть, если в примере

return $whateveryou... 

2:

function staffmember() 
    { 
     $username1 = $this->session->userdata('username'); 
     $sql1 = "SELECT * FROM users WHERE username = :user AND activated = 1"; 
     $staffmember = $this->db->conn_id->prepare($sql1); 
     $staffmember->bindParam(':user', $username1); 
     $staffmember->execute(); 
     $row = $staffmember->fetch(); 

     if($row['staffmember'] == 1) 
     { 
      return $staffmember; 
     } 
    } 


    function is_admin() 
    { 
    $username = $this->session->userdata('username'); 
    $sql = "SELECT * FROM users WHERE username = :user"; 
    $is_admin = $this->db->conn_id->prepare($sql); 
    $is_admin->bindParam(':user', $username); 
    $is_admin->execute(); 
    $row = $is_admin->fetch(); 

     if($row['admin'] == 1) 
     { 
      return $is_admin; 
     } 
    } 

Итак в контроллере вы делаете:

function index() 
    { 
     $this->load->model('staff_model'); 
     if($staffmember = $this->staff_model->staffmember()) //Checks for staff value == 1 
     { 
      if($is_admin = $this->staff_model->is_admin()) // Checks for admin value == 1 
     { 
      $data3['main_content'] = 'admin_view'; 
      $this->load->view('includes/template', $data3); 
     }else{ // If not admin == 1 
      $data['main_content'] = 'staff_homepage_view'; 
      $this->load->view('includes/template', $data); 
     } 
     }else{ // If not staff == 1 
      $data1['main_content'] = 'student_homepage_view'; 
      $this->load->view('includes/template', $data1); 
     } 

}

Надеемся вы можете взять что-то от этого.