Я разрабатываю веб-сайт с использованием Kohana 3.3, и я хочу выборочно отображать элементы HTML UI в зависимости от роли пользователя. e: - Если пользователь является администратором, тогда отобразите гиперссылку "edit", и когда администратор нажмет кнопку редактирования, измените текстовое поле с "readonly" на "normal".
Если пользователь является зарегистрированным обычным пользователем, чем кнопка "задать вопрос".
Если пользователь посетитель, у него нет никаких привилегий.
Прямо сейчас я использую один файл вида и изменяю visbility после проверки состояния php-переменных. Почему-то я чувствую, что я не делаю это правильно, каков предложенный метод для обработки таких сценариев (любые плагины?)?
Итак, вы хотите выделить три разных случая
Место для этого - ваш контроллер. В этом случае у вас есть доступ к Auth::instance()->get_user()
.
$user = Auth::instance()->get_user();
if ($user === null) {
//visitor
} else {
if ($user->has('roles', ORM::factory('Role', array('name' => 'admin')))) {
//admin
} else {
//user
}
}
Теперь, когда вы знаете, как обращаться с делами, вам почему-то нужно сообщить свое мнение. Для этого вы можете создать новую переменную, в которой вы загружаете одно из трех видов - по одному для каждого случая.
$specificViewName = "";
$user = Auth::instance()->get_user();
if ($user === null) {
$specificViewName = "visitor";
} else {
if ($user->has('roles', ORM::factory('Role', array('name' => 'admin')))) {
$specificViewName = "admin";
} else {
$specificViewName = "user";
}
}
$specificView = View::factory("index/".$specificViewName);
Если вы находитесь в Controller_Template
, теперь вы можете использовать $this->template->set("specificView", $specificView);
,
В этом случае у вас будет такой шаблон индекса
<html><!--etc.-->
<h1>Welcome to my website</h1>
<!--stuff all sites share like navigation-->
<?php print $specificView; ?>
<!--more-->
</html>
И индекс/посетитель
<span class="sadtext">Nothing special for you here</span>
Индекс/пользователя
<form>
<button>ask a question!
</form>
Индекс/админ
<a href="edit">hyperlink</a>
$_COOKIE['hash_id']
и выполните несколько SQL-запросов, и все будет в порядке.