Я застрял в понимании того, что является наиболее эффективным методом выполнения:Роли Разрешения и навигация
У меня есть CMS с различными типами пользователей. Все пользователи имеют доступ к одной и той же CMS, однако ссылки на боковой панели (навигации) будут состоять из того, что у пользователя есть разрешение на доступ.
Я пытаюсь выяснить, как я должен собирать это вместе. У меня есть Admin_Controller
, который может быть полезен для ввода логики, но вам нужна помощь в выяснении, как это сделать.
Чтобы пояснить, что я хочу, у меня установлена следующая таблица пользователей и настройка навигации. Предположим, что первый пользователь (1) является гостем, поэтому они могут просматривать только панель управления и ничего больше как эту роль. Возможно, пользователи с ролью 2 могут просматривать панель инструментов и еще 2 меню. Админы могут получить доступ ко всем меню. Что-то еще, чтобы обдумать то, что, если скажем, пользователь может иметь доступ только 2 из трех звеньев из-под меню 2.
Вот пример того, что я "м говорим.
Пользователи Таблица
user_id username status_id role_id
-------------------------------------------
1 testuser1 1 (active) 1 (guest)
2 testuser2 1 2 (user)
3 testuser3 1 3 (editor)
4 testuser4 1 4 (admin)
Навигация
<ul>
<li class="current">
<a class="current" href="<?php echo base_url(); ?>dashboard" data-toggle="tooltip" data-placement="right" title="" data-original-title="Dashboard"> <i class="fa fa-home"></i> </a>
</li>
<li>
<a href="#" data-toggle="tooltip" data-placement="right" title="" data-original-title="Menu 1"> <i class="fa fa-user"></i> </a>
<ul>
<li><a>Test Link 1</a></li>
<li><a>Test Link 2</a></li>
<li><a>Test Link 3</a></li>
</ul>
</li>
<li>
<a href="#" data-toggle="tooltip" data-placement="right" title="" data-original-title="Menu 2"> <i class="fa fa-pencil"></i> </a>
<ul>
<li><a>Test Link 1</a></li>
<li><a>Test Link 2</a></li>
<li><a>Test Link 3</a></li>
</ul>
</li>
<li>
<a href="#" data-toggle="tooltip" data-placement="right" title="" data-original-title="Menu 3"> <i class="fa fa-calendar"></i> </a>
<ul>
<li><a>Test Link 1</a></li>
<li><a>Test Link 2</a></li>
<li><a>Test Link 3</a></li>
</ul>
</li>
<li>
<a href="#" data-toggle="tooltip" data-placement="right" title="" data-original-title="Menu 4"> <i class="fa fa-users"></i> </a>
</li>
<li>
<a href="#" data-toggle="tooltip" data-placement="right" title="" data-original-title="Menu 5"> <i class="fa fa-briefcase"></i> </a>
</li>
<li>
<a href="#" data-toggle="tooltip" data-placement="right" title="" data-original-title="Menu 6"> <i class="fa fa-sitemap"></i> </a>
</li>
</ul>
Admin Controller
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Admin_Controller extends MY_Controller {
protected $data;
public function __construct() {
parent::__construct();
$this -> has_access();
$this -> template -> set_theme('saturn') -> set_layout('default', 'admin') -> set_partial('header', 'admin/partials/header') -> set_partial('navigation', 'admin/partials/navigation');
//if (logged_in()) {
$menu_items = array();
$this -> template -> menu_items = $menu_items;
//}
}
public function has_access() {
$public_access = array('login', 'registration');
$current_class = $this -> router -> fetch_method();
$user_id = $this -> session -> userdata('user_id');
if ($user_id == FALSE) {
if (!in_array($current_class, $public_access)) {
redirect('login', 'refresh');
}
}
else {
if ((!is_numeric($user_id)) || (strlen($user_id) < 5)) {
$this -> session -> unset_userdata('user_id');
$this -> session -> sess_destroy();
redirect('login', 'refresh');
}
else {
$this -> load -> model('user_model', 'user');
$current_user = $this -> user -> get($user_id);
if (!is_object($current_user)) {
$this -> session -> unset_userdata('user_id');
$this -> session -> sess_destroy();
redirect('login', 'refresh');
}
else {
// Make all controllers like roster, match_types, etc have access to the $current_user object.
$this -> data['current_user'] = $current_user;
}
if (in_array($current_class, $public_access)) {
redirect('dashboard', 'refresh');
}
}
}
}
}
'Я застрял в понимании того, что является наиболее эффективным методом выполнения следующих действий:« Я полагаю, что вы застряли, вы ничего не начали? например, покажите нам ваш контроллер и модель. Я могу дать ответ, но я не хочу освобождать его бесплатно, покажу нам какой-то код, а не DOM. –
. Я включу свой контроллер администратора, но, судя по всему, я не знаю, с чего начать. Я обновлю свой пост. – user2576961