В настоящее время я экспериментирую со следующим решением. Хотя он будет работать только для приложений с довольно простым набором пользователей, он может вам помочь.
Для начала аутентификация пользователя выполняется без использования extjs с использованием простой страницы HTML/CSS. После входа пользователя в систему его данные (идентификатор пользователя, роль) сохраняются в сеансе PHP. Затем страница перенаправляется в одно из двух приложений extjs.
Одно приложение для обычных пользователей (я буду называть их клиентами), это люди, которые на стороне клиента JS не содержат никаких функций администратора. Другое приложение для админов.
Оба приложения имеют свои классы, наследуемые от базовых классов. Итак, у нас есть, например, base.mainMenu, из которых наследуются и admin.mainMenu, и clients.mainMenu. Единственное отличие в скрипте app.js заключается в том, что загруженные контроллеры и в динамическом модуле загрузки extJS 4 загружаются только связанные представления (то есть, на стороне клиента). В моем случае все страницы загружаются динамически в любом случае, поэтому мои пользователи могут динамически загружать страницы в своем основном меню.
Приложение администратора блокирует определенные функции, используя глобальную переменную JS, которая включает в себя роль пользователя. Так, например, скрытие кнопки «edit» от модераторов (группа администраторов с меньшими правами) выполняется после загрузки представления (на практике это фактически выполняется, не загружая плагин, который позволяет редактировать на представлении).
Чтобы все это сделать, любой вызов сервера проверяет, имеет ли пользователь сеанса права на запрашиваемую операцию, поэтому независимо от сценариев на стороне клиента операции с сервером могут выполняться только людьми с соответствующими правами.
Итак, у вас есть 3 различных стратегий, которые вы можете смешивать и матч:
- Загрузка различных приложений для различных пользователей. Если ваши классы все присущи базовым классам, это проще, чем поддерживать 2 или более совершенно разных приложения.
- Использование глобальной переменной JS для отключения/включения определенных функций для определенных пользователей. Это полезно только в том случае, если у вас нет проблем с функциями загрузки на стороне клиента, которые затем отключены (но все еще видны отладчиками).
- Независимо от всего, все вызовы на стороне сервера проверяются на переменную сеанса.
Это действительно лучший пример для этого, даже если он ориентирован на Java. Спасибо за предоставление этой ссылки! –
Хорошая работа в вашем блоге .. –