ФОН:Wpf пользователь Стратегия безопасности
Я создаю приложение WPF (.NET 4.5 с MVVM-Light)
я создал роли пользователей в базе данных, примыкающее приложение WPF, где пользователей в WPF приложения имеют назначенную роль (т.е. пользователь, менеджер, владелец, администратор)
ЧТО Я ХОЧУ:
Мой клиент хочет иметь возможность ограничивать то, что пользователи видят и что могут делать пользователи, исходя из их роли. Есть некоторые представления, которые будут видны всем пользователям, поэтому некоторые визуальные элементы (сетки, кнопки и т. Д.) Должны быть скрыты или отключены в зависимости от роли пользователей.
ЧТО Я ИМЕЮ:
Я создал IUserService, который получает впрыскивается в каждый ViewModel. Роли, которые я создал, имеют поле, которое отмечает их уровень безопасности (просто целое число от 1 до 5). Я хочу ограничить видимость визуальных элементов на основе этого числа.
Например, мой план состоит в том, чтобы привязать видимость элемента к логическому свойству (с использованием конвертера boolToVisibility) в viewmodel (Level1, Level2 и т. Д.), И это свойство вернет true, если уровень пользователей совпадает или больше уровня собственности.
МОИ ЗАБОТЫ:
Меня беспокоит то, что это много работы, чтобы реализовать в каждом ViewModel и на каждом визуальный элемент, который необходим. Кроме того, у меня уже есть некоторые визуальные элементы, на которые влияет другая бизнес-логика.
ВОПРОС:
Что является эффективным способом, чтобы ограничить возможность пользователям «просматривать» визуальные элементы, основанные на стратегии роли пользователя?
Я готов начать эту работу, но мне бы хотелось услышать другие идеи сообщества о том, как безопасность на основе роли пользователей реализована в приложении WPF.
Я работаю с «Призмой» и реализовано аналогичное поведение с помощью [навигации по регионам] (http://stackoverflow.com/questions/18984879/asp-net-like-form-based-authentication-in-wpf-mvvm-prism/18985193#18985193). У меня было несколько просмотров для каждой роли, и в «ConfirmNavigationRequest» решили, кто получает доступ к какому виду. возможно, в MVVM-Light есть аналогичный интерфейс ... –
Я бы привязал видимость элементов управления, которым вы хотите управлять, к свойству, которое представляет текущую роль пользователя, используя конвертер, который возвращает требуемое состояние видимости в зависимости от текущей роли. Также вы можете передать разрешенную роль с помощью параметра преобразователя. – Taras
В качестве предупреждения, если вы используете такой инструмент, как Snoop, вы можете изменить видимость элементов управления во время выполнения, поэтому важно обеспечить безопасность на более низких уровнях. – gouldos