Справочная информация
Еженедельно мы будем заставлять некоторых пользователей звать на помощь, почему вы не можете сделать X в форме Y. Из-за сложных бизнес-правил нам часто приходится самим просматривать код, чтобы понять, почемуэто конкретное действие не доступно в то время.Есть ли проверенные стратегии для борьбы с этим?
Как собрать всю информацию из графического интерфейса пользователя, бизнес-правил и / или безопасности, которая приводит к отключению кнопки?
Пример
пользователь не может удалить измерение из формы обзора измерений, потому что
GUI
- в форме не выбрано измерение.
- в форме выбрано несколько измерений.
Бизнес-правила
- выбранное измерение было использовано в расчете.
- с каким выбранным измерением связано (чтомы называем) productfiche.
Безопасность
- текущий пользователь не является членом группы аналитиков, ответственных за это конкретное измерение.
- текущий пользователь не является аналитиком.
Редактировать
Относительно действительных комментариев о том, что мы уже сделали расчет, чтобы решить,контроль должен быть отключен.
Мы используем ACL для домашнего приготовления для обеспечения безопасности.Это шаги, чтобы решить, должен ли элемент управления быть отключен
- Глобальный ACL извлекается (в настоящее время из базы данных).Если в ACL для свойства измерения присутствует
Write ACE
, это означает, что текущий пользователь имеет право изменить измерение. - Измерительный бизнес-объект получает копию этого глобального ACL-списка.Бизнес-объект помещает свои бизнес-правила поверх извлеченного ACL.Если бизнес-правила предписывают, что измерение не должно быть доступно для записи, оно добавляет
Deny Write ACE
в ACL.
Обратите внимание, что бизнес-объект может только сделать безопасность более ограничительной.Если глобальная безопасность требует, чтобы это не было сделано, это не может быть сделано. - Связь с ACL бизнес-объекта и GUI осуществляется через то, что мы называем нашим объектом GuiMap.Этот объект извлекает копию ACL из бизнес-объекта и позволяет разработчику добавлять к нему указатели функций, возвращающие логические значения, для добавления
Gui rules
поверх списка ACL бизнес-объектов.
Теперь, чтобы определить,кнопка должна быть включена, GuiMap оценивает каждую переданную ей функцию в сочетании с безопасностью, определенной ACL бизнес-объекта, и в крайнем случае с безопасностью пользователя.
- Если у пользователя нет прав, результат всегда отключается.
- В противном случае, если бизнес-правила говорят, что он должен быть отключен, он отключается.
- elseесли какое-либо из правил Gui говорит, что оно должно быть отключено, оно отключено.
Таким образом, фактически каждый слой строится поверх предыдущего, чтобы определить окончательный результат.Это не значит, что будет один расчет, чтобы определить, должна ли быть включена кнопка или что-то еще.
Прелесть, если вам нравится, заключается в следующем: по мере того, как ACL раздает копии, копии прикрепляются к мастеру и получают уведомление, когда их основной ACL get обновляется.Это позволяет нам
- позволять обновлять каждый элемент управления, если пользователь выходит из системы на любом экране.
- разрешать обновлять каждый элемент управления при изменении бизнес-объекта.
Это работает довольно хорошо для нас, за исключением того, что трудно понять, почему что-то отключено.