Как разрабатывать ПО с GUI, который адаптируется под определённого пользователя?
На данный момент в организации есть десктопное приложение, которое "показывает" одинаковый интерфейс для каждого пользователя. Таким образом, даже если пользователю недоступен какой-либо функционал, он будет видеть кнопку, которая этот функционал "запускает", но при её нажатии или ничего не произойдёт, или будет ошибка. Примером такой функции является подключение к удалённому рабочему столу для удалённой работы - не каждый пользователь имеет права для этого.
Нужно разработать приложение, которое для каждого пользователя будет показывать персонализированный интерфейс, в зависимости от того, кем является пользователь, к какой группе относится и т. д. Ещё необходимо реализовать механизм принудительного автообновления приложения, чтобы у всех пользователей была актуальная версия. Эти два требования позволяют избавиться от основных недостатков старого приложения.
Если с автообновлениями все достаточно понятно, то вот с персонализированным GUI в десктопном приложении все не так однозначно.
Будет использоваться WPF (C#). Есть ли какие-то правила разработки подобных интерфейсов? А если нет, то как бы вы сделали это?
Лично я (я не профессиональный разработчик) вижу пока два пути - использовать условные конструкции для решения об отображении или неотображении тех или иных элементов GUI, либо иметь разные XAML-формы для разных групп пользователей. Но данные способы мне кажутся неоптимальными.
использовать условные конструкции для решения об отображении или неотображении тех или иных элементов GUI, либо иметь разные XAML-формы для разных групп пользователей
Это одно и тоже решение, просто условия разное меняют. Всё зависит от вида приложения можно применять разные решения.
Для хороших WPF приложений принято использовать MVVM, соответственно для всего будут вьюмодели.
Если это приложение - набор ярлыков, то можно просто не создавать вью модели или скрывать (BooleanToVisibilityConverter) недоступные ярлыки.
Если что-то сложнее, то вероятно для разных пользователей будут разные вьюмодели и разные XAML шаблоны для них.