Совмещение Yii и angularjs кто как делает

Всё что касается построения API
Ответить
webster
Сообщения: 36
Зарегистрирован: 2011.12.17, 13:17

Совмещение Yii и angularjs кто как делает

Сообщение webster »

Приветствую. Вопрос не конкретно по api, но думаю тех кто с таким сталкивается здесь наибольшее число.

Задался на медне таким вопросом. Как лучше поступать с шаблонами. Делать их полностью статичными файлами без php кода, или делать пререндер на сервере и отдавать шаблон клиенту.

1. С php.

Плохо вижу следующее:
  • Найти тех то разберется и в php коде (специфика yii - всякие там Url:: Html::) будет сложней
  • Выглядит хуже (хотя это не сказать чтобы очень сильно волнует).
  • Не скомпилируешь все шаблоны в один и нужно будет за каждый дергать сервер.
Из хорошего:
  • Можно сделать различные штуки которые будет не удобно делать в angularjs, А порой просто нереально сложно. Например: RBAC - и сложный шаблон где часть кнопок должна быть видна одному типу пользователей, часть другому, роли наследованны. В пререндере мы можем средствами yii это обыграть и отдать шаблон без этих элементов.
2. Просто статичные файлы:

Из хорошего:
  • Все недостатки из 1 варианта убиваются.
  • Получается как бы независимое приложение можно его использовать с чем угодно, достаточно лишь возвращать данные в том же формате.
Из плохого:
  • Проблема с такими моментами как RBAC возникают на ровном месте. Придется изголяться, чтобы их решать.
Кто как поступает, поведайте.

Аватара пользователя
MetaDriver
Сообщения: 43
Зарегистрирован: 2014.04.21, 20:53
Откуда: Казань

Re: Совмещение Yii и angularjs кто как делает

Сообщение MetaDriver »

Полгода назад буриданил перед тем же выбором.

В итоге пошёл по второму пути, чем нынче очень доволен.

Собсно "проблемы с такими моментами как RBAC" видятся из-за слабого знания ангуляра и недостатка времени на принятие важного архитектурного решения. Мне удалось придумать способ отложить принятие этого решения следующим образом: (1) я решил что в любом случае следует разделить поставку данных из базы (REST-api) и фронтенд-код (html-css-js) по разным приложениям (и доменам). (2) решил начать построение фронтенда со статичных файлов, оставив за собой право добавить php-генерацию шаблонов "когда накопится необходимость" такой генерации.

Так вот. На сегодняшний день список "накопленной необходимости" абсолютно пуст..! :D

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

Например, один из простых способов решить проблему прав доступа к средствам RBAC: загрузка (rest-запрос) и анализ таблицы прав юзера в момент авторизации, с одноразовой процедурой установки значений всех необходимых "show-переменных" в правильные (соответствующие роли) значения. Это резко упрощает (ускоряет!) проверку прав при отображении конкрентых "условных" полей форм - вся проверка в каждом случае сводится к проверке заранее вычисленного значения одной переменной.

webster
Сообщения: 36
Зарегистрирован: 2011.12.17, 13:17

Re: Совмещение Yii и angularjs кто как делает

Сообщение webster »

MetaDriver писал(а):Полгода назад буриданил перед тем же выбором.

В итоге пошёл по второму пути, чем нынче очень доволен.

Собсно "проблемы с такими моментами как RBAC" видятся из-за слабого знания ангуляра и недостатка времени на принятие важного архитектурного решения. Мне удалось придумать способ отложить принятие этого решения следующим образом: (1) я решил что в любом случае следует разделить поставку данных из базы (REST-api) и фронтенд-код (html-css-js) по разным приложениям (и доменам). (2) решил начать построение фронтенда со статичных файлов, оставив за собой право добавить php-генерацию шаблонов "когда накопится необходимость" такой генерации.

Так вот. На сегодняшний день список "накопленной необходимости" абсолютно пуст..! :D

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

Например, один из простых способов решить проблему прав доступа к средствам RBAC: загрузка (rest-запрос) и анализ таблицы прав юзера в момент авторизации, с одноразовой процедурой установки значений всех необходимых "show-переменных" в правильные (соответствующие роли) значения. Это резко упрощает (ускоряет!) проверку прав при отображении конкрентых "условных" полей форм - вся проверка в каждом случае сводится к проверке заранее вычисленного значения одной переменной.
А я склонился к первому, причина банальная сильно сэкономит время на решение проблем которые сам и нароешь себе. Случай с загрузить загрузить зарание тоже иммет место. Но при сложной иерархией он очень нуден, считай нужно повторить весь набор правил в js коде. По тому что скажем, модератор имеет все возможности пользователя, а админ все возможность обоих.

Аватара пользователя
MetaDriver
Сообщения: 43
Зарегистрирован: 2014.04.21, 20:53
Откуда: Казань

Re: Совмещение Yii и angularjs кто как делает

Сообщение MetaDriver »

webster писал(а):...........
Но при сложной иерархией он очень нуден, считай нужно повторить весь набор правил в js коде. По тому что скажем, модератор имеет все возможности пользователя, а админ все возможность обоих.
Это смотря как сделать. У меня SPA-приложение при авторизации получает от Yii наряду с токеном доступа готовую детализированную JSON-таблицу прав конкретного (регистрируемого) юзера. В ней нет никаких следов ролевой иерархии - вся эта бюрократия один раз анализируется на PHP, а в респонс уходит чисто-рафинированный результат. Что-то типа :

Код: Выделить всё

   [
       { "sysMenuView" : "false" },
       { "table_1" : "view" },
       { "table_2" : "no" },
       { "table_3" : "edit" },
       { "table_4" : "edit" },
       { "table_5" : 
         [ 
           "id":"no", 
           "name":"view", 
           "full_name":"view", 
           "address":"edit", 
           "status":"edit", 
           "blabla":"view", 
           "asdfgh":"no", 
         ] 
       },
    ..................
    ...  и.т.д
   ]

webster
Сообщения: 36
Зарегистрирован: 2011.12.17, 13:17

Re: Совмещение Yii и angularjs кто как делает

Сообщение webster »

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

В общем и целом оба варианта хороши, кому что больше по душе. К слову вариант с php можно еще так оправдать. Angular по суди всего-лишь добавляет расширенные атрибуты в html по этому какой именно html код ему вернуть должен решить сервер, и отдать только то что реально было необходимо в приложении. Скажем если у нас пользователь не имеет возможности редактировать объекты, то и нет смысла ему отдавать страничку код в которой предусматривает такое поведение.

Ответить