Модель, вьююуу. контролллер. Даа....
Заметил, что меня часто начинает тормозить такая вот задача:
Есть таблица в бд с правами пользователя , которая повествует нам, что мол "юзер1 имеет доступ к действию а юзер 2 имеет доступ к и ". В общем у каждого свои права.
При рисовании ссылки в View'e мне сейчас пришлось сунуть функцию из Model в View, которая:
1) смотрит на юзера из сессии
2) ищет его права
3) смотрит на ссылку которая сейчас рисуется
4) делает вывод рисовать её или нет, в зависимости от прав
Получается что View имеет доступ к Model, что нарушает православие MVC насколько я помню.
Можно сразу весь массив ссылок готовить для юзера в контроллере. Но вы представляете? На всей странице куча ссылок. Одни ссылки в одной логической части страницы, другие в другой. Там такое нагромождение кода получится! Ужас. Метод в контроллере будет занимать 100500 строк. Так что удобней перед рисование каждой ссылки в View делать проверку.
Для каждого типа юзера делать свой шаблон с уже нарисованными ссылками не получится, ибо права раздаются как в 1С - галочками. Что могу а что не могу.
Как вы делаете?
Вот моя система доступа в абстракции:
class Model {
public function getUser()
{
return $this->user;
}
public function getUserRights($user) {
return array("edit_news","delete_page");
}
}
class View {
private function is_access($level)
{
$user=$_SESSION['id'];
$model=new Model();
return in_array($level,$model->getUserRights($user));
}
function render($template,$data);
}
class Controller {
public function action_news()
{
$this->model= new Model();
$this->view=new View();
$this->data['text']=$this->model->get_text_of_news();
$this->view->render("text.html",$this->data);
}
}
text.html :
<?
if($this->is_access('edit_news')) echo "<a href=\"edit.php\">Редактировать новость</a>";
?>
Это вообще нормально?