Обеспечение безопасности в бизнес-приложений, созданных с помощью Lightswitch 2011
Таким образом, для использования механизмов контроля доступа необходимо, чтобы пользователь прошел первичную аутентификацию. Для обеспечения возможности отладки приложений с контролем доступа LightSwitch IDE использует собственный механизм аутентификации. На этапе разработки не требуется информация о пользователе (его роль и разрешения), вместо этого достаточно установить разрешения которые разработчик хочет иметь на этапе тестирования.
Для включения настроек безопасности и их настройки необходимо выполнить следующие действия
- Запустить LightSwitch и открыть проект.
- В Инспекторе проекта выполнить двойной щелчок по пункту Свойства и открыть окно свойств проекта и выбрать там вкладку Управление доступом ( рис. 18.1).
- Установить опцию Использовать проверку подлинности с помощью форм.
- Выбрать Добавить новое разрешение в таблице пользовательских разрешений и напечатать Администратор, также напечатать это же в столбце Отображаемое имя, и установить флажок Предоставлено для отладки. ( рис. 18.2)
- Перейдите на вкладку Переход по экранам, выполните щелчок правой кнопкой по элементу Студенты По Группам и выберите команду Изменить код СтудентыПоГруппам_CanRun из контекстного меню ( рис. 18.3).
- Вставьте указанный ниже код в метод СтудентыПоГруппам_CanRun
partial void СтудентыПоГруппам_CanRun(ref bool result) { // Присвоение результату значения нужного поля result = User.HasPermission (Permissions.Администратор); }
- Повторите указанные в предыдущем пункте действия для других форм.
- Запустите приложение и убедитесь, что доступ к указанным экранам возможен.
Отключите флажок Предоставлено для отладки у разрешения Администратор и повторно запустите приложение, убедитесь, что доступ к экранам не возможен и эти формы отсутствуют в списке экранов.
Существуют различные объекты, на которые в LightSwitch можно установить контроль доступа. Можно выделить следующие основные их категории:
- таблицы, созданные внутри LightSwitch;
- таблицы, полученные из внешнего источника данных;
- запросы;
- экраны;
- каналы доступа.
Имя метода контроля доступа состоит из двух частей: <имя объекта>_<название разрешения>. Имя объекта это название сущности (таблицы или запроса) или название экрана для которого устанавливается контроль доступа. Методы контроля доступа не возвращают значений, но у них имеется один параметр под названием result, передаваемый по ссылке и имеющий тип Boolean. Если метод контроля доступа не определён или его тело пустое, то это эквивалентно тому, что параметр result установлен в значение True и позволяет выполниться заращиваемой операции. Для того чтобы запретить выполнение операции необходимо установить параметр result в значение False.
Для определения кода метода контроля доступа необходимо открыть связанный объект в дизайнере и используя кнопку Записать код перейти в редактор кода, а там выбрать необходимый метод контроля доступа из списка.
Различные объекты имеют различные возможности по контролю доступа так для сущностей доступны методы вставки, удаления, обновления, добавления для запросов, экранов и безопасных каналов можно контролировать возможность их выполнения.
В систематизированном виде это представлено в таблице 18.2 .
Объект | Метод | Описание метода |
---|---|---|
Таблица | CanDelete | Определяет возможность текущего пользователя удалять записи из таблицы |
CanInsert | Определяет возможность текущего пользователя добавлять записи в таблицу | |
CanRead | Определяет возможность текущего пользователя просматривать информацию | |
CanUpdate | Определяет возможность текущего пользователя изменять информацию | |
Запрос | All_CanExecute | Позволяет пользователю выполнять запрос, который возвращает все записи из источника данных запроса |
Single_CanExecute | Позволяет пользователю выполнять запрос, который возвращает одну запись по передаваемому ключу | |
SingleOrDefault_CanExecute | Позволяет пользователю выполнять запрос, который возвращает одну запись по передаваемому ключу, если записи не существует, то возвращается значения Null. | |
Экран | CanRun | Определяет возможность для текущего пользователя открывать заданный экран. Если использовать экрана можно, то он отображается в меню задач приложения. |
Безопасный канал | SaveChanges_CanExecute | Метод контролирует возможность текущего пользователя сохранять выполненные изменения в базе данных. Он выполняется сервером перед началом операции сохранение, если параметр result установлен в значение false, то сохранение будет невозможным. |
Для реализации механизмов контроля доступа необходимо в соответствующий метод записать код, который будет вычислять значение параметра result. При этом можно использовать информацию о разрешении текущего пользователя, а также любую дополнительную информацию. Сам характер расчетов никакого значения не имеет, а используется только итоговое значение параметра result. Если он равно True, то пользователь имеет возможность использовать ресурс, а если False то не имеет. Наиболее используемым способом вычисления значения result является вызов метода HasPermission у объекта User. Он возвращает True, когда пользователь имеет разрешения, которые передаются методу в качестве параметра.
В более сложных сценариях обеспечения безопасности, когда необходимо выполнить разграничение прав на уровне записей, например, когда пользователи одного типа имеют различные сферы ответственности и не должны иметь доступа к не своим данным. При этом сами экраны и запросы для них одинаковые, использовать методы контроля доступа не имеет смысла. В этом случае используются методы All_PreprocessQuery и All_Executed для требуемой таблицы и в эти методы записывается код на языке Linq , который должен выполнять требуемую фильтрацию в соответствии с правами текущего пользователя.
Во время разработки приложения LightSwitch не требуется управлять ролями и пользователями для требуемых в ходе отладки приложения разрешений достаточно установить флажок Предоставлено для отладки и для учетной записи из-под которой осуществляется отладка будет представлено это разрешение.
Добавлять роли и пользователей будет необходимо, когда приложение установлено на сервере необходимо будет добавить роли, привязать их к разрешениям и добавить пользователей с привязкой к различным ролям.
Как уже упоминалось, LightSwitch поддерживает различные механизмы аутентификации в настройках можно выбрать один из трех способов:
- Использовать проверку подлинности Windows;
- Использовать проверку подлинности с помощью форм;
- Не включать проверку подлинности.