Сейчас нужно выполнить довольно крупный проект и возникло несколько вопросов.
Приложение представляет из себя систему заказов, немного документооборота и бухгалтерии. Есть 4 типа (роли) пользователей: менеджер, исполнитель, заказчик и гость. У каждого типа пользователя есть своя панель управления (кроме гостя) со своим функционалом. Собственно вопрос:
Как лучше организовать каждую панель управления и разделить приложение на части?
У меня возникло 3 варианта - 1 делать отдельно для каждого типа пользователя приложение в виде панели управления, 2 сделать на основе модулей, 3 для каждой панели управления сделать свой контроллер и наследоваться от него.
В первом случае получается большой оверкод, но полная независимость частей друг от друга. В третьем, мне кажется, при множестве контроллеров получится каша и тяжело будет поддерживать приложение. Второй вариант, имхо, подходит всех лучше, но возникают такие вопросы:
Можно ли из модуля получить доступ к моделям приложения и к моделям других модулей. Как получить доступ из приложения к моделям модуля. Видел, что такое можно с видами…
При использовании RBAC в приложении будут ли распространяться правила на модули?
Из вашего описания не очень понятно, насколько различаются панели управления. Понятно, что вид у них разный, но используемые модели, компоненты и расширения могут быть общими (в этом случае нет смысла создавать различные приложения).
Сделал админ часть по предложенному способу, сделал разделение доступа по ролям. Во всех браузерах работает нормально, кроме IE. В IE после авторизации показывается главная страница админ части, а через секунду ошибка 404.
Кто-нибудь сталкивался с таким?
Все контроллеры админ части наследуются от базового:
<?php
class AdminBaseController extends CController
{
public $layout='main';
public $menu=array();
public $breadcrumbs=array();
public function init() {
Yii::app()->user->loginUrl = array('/login');
}
public function filters()
{
return array(
'accessControl',
);
}
public function accessRules()
{
return array(
array('allow',
'actions'=>array('login'),
'users'=>array('*'),
),
array('allow',
'roles'=>array(User::ROLE_ADMIN),
),
array('deny',
'users'=>array('*'),
),
);
}
}
Думал, что дело в настройках PHP. Написал 2а проверочных скрипта, первый ставит куку, второй - читает: