система проектирования с отображением пользовательского интерфейса, управляемого сервером, в Angular (внешняя часть) + Java (внутренняя часть)

Я создаю одностраничную веб-систему, используя Angular в качестве интерфейса и Java (Spring-Boot) в качестве сервера. Эта система имеет разные роли, и пользователю должна быть назначена одна роль. Разные роли могут выполнять разные операции.

Скажем, для простоты: в системе есть 2 роли: суперпользователь и администратор. Единственной функцией в этой системе является продукт, который имеет 3 свойства: имя, розничная_цена, заводская_цена. Суперпользователь может добавить продукт и обновить эти свойства. Администратор может просматривать имя и розничную_цену, но не может видеть заводскую цену. Администратор также может обновлять розничную_цену, но не может добавлять продукт.

Чтобы реализовать управление этой функцией в Angular, прямо сейчас я жестко кодирую код в HTML. При отображении страницы «Продукты» кнопка «Добавить» будет отображаться, если пользователь для входа принадлежит привилегированному пользователю. При отображении страницы сведений о продукте factory_price будет скрыт, а поле имени будет доступно только для чтения, если пользователь для входа принадлежит администратору.

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

Еще одна проблема заключается в том, как обрабатывать разные HTML для разных ролей. например, для страницы сведений о продукте я хочу подготовить содержимое HTML для другой роли на стороне сервера, и как только пользователь входа в систему переходит на страницу сведений о продукте, angular просто отправляет вызов Restful и получает содержимое HTML из бэкэнда и показывает его. Тогда клиентской стороне не нужно иметь никакой логики и просто показывать ее. Должен ли я использовать другой шаблон HTML для другой роли?


person lorcel    schedule 14.12.2016    source источник


Ответы (1)


Используемый вами протокол — это HTTP, который не имеет состояния. Не упоминается, какую технологию в Java ( Spring , JSP Servlet ) вы используете для своего бэкенда. Если у вас есть разные пользователи и у них разные полномочия или роли, вам необходимо сохранить сеанс, связанный внутри серверной части. Когда вы можете получить зарегистрированного пользователя, вы можете извлечь роли этого пользователя. По этим атрибутам вы можете запрашивать базу данных и предоставлять данные на стороне клиента.

person Shamitha Silva    schedule 14.12.2016
comment
Я могу получить роль для пользователя входа в систему из сеанса входа. На самом деле проблема заключается в том, как спроектировать систему после получения информации о ролях. я использую angular на стороне клиента и хочу избавиться от любой логики управления со стороны клиента. Таким образом, серверная сторона должна подготовить весь HTML-контент и отправить клиенту. Клиенту просто нужно показать содержимое. Похоже, мне нужно подготовить некоторый HTML-контент в бэкэнде и использовать другой шаблон для другой роли, а затем вернуться к клиенту. - person lorcel; 14.12.2016
comment
при использовании angular вам необходимо установить шаблоны просмотра в сценариях на стороне клиента. В вашем сценарии вам нужна обработка html на стороне сервера с помощью технологии, подобной JSP. Но при разработке с помощью REST API обработка логики на стороне клиента может стать низкой. Я предлагаю вам вытащить объекты JSON с сервера, и в соответствии с параметрами этих объектов вы можете выбрать шаблоны на стороне клиента. - person Shamitha Silva; 15.12.2016
comment
Для меня, поскольку Angular 2 больше относится к ООП, я считаю, что лучше всего разрабатывать REST API. - person Shamitha Silva; 15.12.2016
comment
Я не уверен, что лучше всего выбирать шаблоны углового представления на стороне клиента на основе ответа сервера, потому что в этом случае угловая сторона по-прежнему имеет такую ​​​​логику управления, например, если для этой роли пользователь этот шаблон, для другой роли используйте это шаблон. Кроме того, это представит множество шаблонов, например, для моего случая будет два шаблона для страницы со списком продуктов, один для суперпользователя, другой для администратора, у которого нет кнопки «ДОБАВИТЬ». два шаблона для страницы сведений о продукте, один для суперпользователя, другой для администратора, который не показывает factory_price, а имя не редактируется. - person lorcel; 16.12.2016
comment
Обработка некоторой логики контроллера и различных шаблонов делает технологии, подобные Angular, ценными. Если это добавляет дополнительную работу на стороне клиента, используйте сервлеты JSP, такие как стек, где вы можете обрабатывать большую часть логики на стороне сервера. - person Shamitha Silva; 16.12.2016