Помогите архитектурой приложения

Здравствуйте, я не так давно начал изучать yii.

Сейчас нужно выполнить довольно крупный проект и возникло несколько вопросов.

Приложение представляет из себя систему заказов, немного документооборота и бухгалтерии. Есть 4 типа (роли) пользователей: менеджер, исполнитель, заказчик и гость. У каждого типа пользователя есть своя панель управления (кроме гостя) со своим функционалом. Собственно вопрос:

Как лучше организовать каждую панель управления и разделить приложение на части?

У меня возникло 3 варианта - 1 делать отдельно для каждого типа пользователя приложение в виде панели управления, 2 сделать на основе модулей, 3 для каждой панели управления сделать свой контроллер и наследоваться от него.

В первом случае получается большой оверкод, но полная независимость частей друг от друга. В третьем, мне кажется, при множестве контроллеров получится каша и тяжело будет поддерживать приложение. Второй вариант, имхо, подходит всех лучше, но возникают такие вопросы:

  1. Можно ли из модуля получить доступ к моделям приложения и к моделям других модулей. Как получить доступ из приложения к моделям модуля. Видел, что такое можно с видами…

  2. При использовании RBAC в приложении будут ли распространяться правила на модули?

Поделитесь опытом пожалуйста.

Вариант 4. Одна БОЛЬШАЯ панель управления, а в зависимости от роли пользователя функционал показывается или скрывается. Прямо во вьюшке:


if(user->role == 'manager') echo CHtml:: ...

Во-первых все панели сильно отличаются по функционалу, а во-вторых такую большую панель будет трудно обслуживать.

Если разными будут в основном только контроллеры и вьюхи, то, возможно, вам подойдет такое разделение (тут back-end’ов может быть сколько угодно): http://www.yiiframework.com/wiki/63/organize-directories-for-applications-with-front-end-and-back-end-using-webapplicationend-behavior

Из вашего описания не очень понятно, насколько различаются панели управления. Понятно, что вид у них разный, но используемые модели, компоненты и расширения могут быть общими (в этом случае нет смысла создавать различные приложения).

Спасибо большое, думаю это самое подходящее решение. Основное отличие панелей - это вид и контроллеры.

Сделал админ часть по предложенному способу, сделал разделение доступа по ролям. Во всех браузерах работает нормально, кроме 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а проверочных скрипта, первый ставит куку, второй - читает:




<?php

setcookie ('enter', 'yes', time() + 333600);

echo 'Cookie set';

?>






<?php

echo (isset($_COOKIE['enter']) && $_COOKIE['enter'] == 'yes') ? 'Cookie is set' : 'Cookie is not set';

?>



Куки работают.