Представления на основе ролей в extjs4 mvc

Мое приложение имеет разные представления для разных ролей, таких как (администратор или обычный пользователь). Я не знаю, как реализовать его с помощью extjs4 MVC. В примерах документации extjs4 считается, что у приложения есть только одна роль, как у обычного пользователя, поэтому они создают один файл app.js, который управляет приложением, но если у приложения много ролей, я не знаю, как реализовать разные представления для разных пользователей.
Один дело в том, что у меня есть два файла app.js в приложении, и после того, как я получаю роль пользователя на сервере, я загружаю соответствующий файл app.js, чтобы использовать соответствующие представления, контроллеры, модели, хранилища и т. д.
Это правда?


person taher    schedule 18.02.2013    source источник


Ответы (1)


Это довольно стандартный вопрос, который возникает так много раз, и ответ всегда один и тот же:

  • Контроль доступа принадлежит серверу, где ни один пользователь не может им манипулировать.
  • Просто не предоставляйте представление/модель/контроллер пользователю, к которому у него нет доступа.

Имея это в виду, не имеет значения, есть ли у вас одно приложение или десять.

И поскольку контроль доступа не относится к внешнему интерфейсу, в ExtJS нет реализации.

Обновить -> Скрыть элементы пользовательского интерфейса

Готовым подходом будет использование Ext.direct. Это предоставляет приложению API, который может быть изменен на основе пользовательского доступа текущего пользователя, а затем может быть проверен внешним интерфейсом.

Как:

Создайте API на основе сеанса пользователя и проверьте на стороне клиента, например

if(Booking) {
   if (Booking.Create) {
       // has access
   }
}

или как одна строка

{
    xtype: 'button',
    hidden: !(Booking && Booking.Create)
}

Это всего лишь простой пример того, как легко это можно сделать!

обновить Эта ссылка помог оп

person sra    schedule 18.02.2013
comment
Из вашего ответа я заметил, что у меня должно быть два файла app.js для моего приложения на стороне сервера. Это правда? - person taher; 18.02.2013
comment
@taher, это был бы вариант, если у вас есть только две роли. Но если у вас больше ролей, возможно, вам придется переосмыслить свой дизайн. Значение: возможно, вы не сможете использовать только предварительно скомпилированные библиотеки. Ваш сервер должен будет раздавать определенные библиотеки только пользователям с соответствующим доступом или объединять их во время входа пользователя в систему или предоставлять полное приложение, которое скрывает элементы пользовательского интерфейса для частей, к которым у пользователя не было доступа. - person sra; 18.02.2013
comment
Спасибо. На случай, если у приложения больше ролей, можете ли вы привести пример сокрытия элементов пользовательского интерфейса для частей, к которым у пользователя не было доступа? - person taher; 18.02.2013
comment
Спасибо @sra за ваш ответ, но я не знаю, что такое Booking в вашем коде! Вы можете объяснить об этом? - person taher; 18.02.2013
comment
@taher Это пример API - person sra; 18.02.2013
comment
спасибо за вашу помощь, пожалуйста, импортируйте эту ссылку в свой ответ, чтобы быть полезным ibm.com/developerworks/web/library/wa-aj-streamline/index.html - person taher; 21.02.2013