Я опытный разработчик, но новичок в Silverlight, Prism, MVVM и во всем, что с этим связано, и мне нужен гибкий подход к безопасности в новом разрабатываемом приложении.
У меня есть эта модель безопасности, реализованная через пользовательскую платформу безопасности, которую я построил для WinForms (фактически Visual WebGui), но мне нужно получить некоторые рекомендации о том, как реализовать это для Silverlight или есть ли что-то уже построенное, что я могу использовать.
Все модули реализуют два интерфейса: ISecurableModule и ISecuredModule .
ISecurableModule используется для регистрации модулей в репозитории безопасности.
ISecuredModule используется для обеспечения безопасности.
В моем приложении Winforms при запуске (фактически после новой установки, при первом запуске) запускается модуль, который посредством рефлексии проверяет все сборки в поисках модулей, реализующих интерфейс ISecurableModule. Этот интерфейс сообщает, если модуль может быть запущен в режиме добавления, режиме редактирования, режиме просмотра или ни в одном из них (например, модуль отчетности или выборка / фильтр данных могут быть открыты только в режиме просмотра, поскольку в нем нельзя изменить данные, но запись данных может быть открыта только в Добавить, или в Добавить / Изменить, или в Просмотр)
Все эти данные сохраняются в хранилище безопасности.
Чтобы определить права безопасности, я могу создать категории безопасности - например, Оператор инвентаризации, Супервизор инвентаризации, Оператор платежной ведомости, Супервизор платежной ведомости и т. Д. Для каждой категории я назначаю модули, выбранные из репозитория безопасности, с соответствующими правами (например, для Оператора инвентаризации я назначаю модуль Операция инвентаризации при приеме или Операция инвентаризации переноса с правами добавления и просмотра, а для Inventory Supervisor я назначаю все модули инвентаризации с полными правами)
Затем я создаю роль оператора инвентаризации и назначаю ему категорию безопасности оператора инвентаризации. Я могу назначить несколько категорий безопасности для каждой роли (потому что я могу создавать категории безопасности с более высокой степенью детализации - например, категория безопасности для управления собственной учетной записью или для управления группой пользователей - которые будут предоставлены руководителям и т. Д.)
Затем во время выполнения у меня есть концепция рабочего места (например, оболочки в Prism), где я могу загружать модули динамически (действительно динамически, я использую шаблон ServiceLocator для определения местоположения компонента на основе реализуемого им интерфейса, а затем для каждого контроллера есть контроллер класс модуля - модули, реализующие один и тот же интерфейс - который может использовать поле enum для определения того, какой модуль действительно загружать в течение времени, необходимого для обработки данных). Контроллер рабочего места использует поставщика безопасности, который проверяет права доступа для загружаемого модуля на соответствие правам доступа для текущего пользователя.
В моем приложении SL4 я хочу использовать шаблон MVVM, и поэтому я хочу, чтобы мои представления не кодировались и управляли всей функциональностью с помощью ViewModel, ICommands и привязки данных. Поэтому мне нужны некоторые предложения о том, как я могу реализовать такую функциональность, которую я описал в приложении SL4. Я не особо привязан к Prism, поэтому я рассмотрю, есть ли еще один фреймворк SL4, который может помочь мне в достижении этой цели.