Опубликован: 27.12.2011 | Доступ: свободный | Студентов: 1334 / 36 | Оценка: 4.44 / 4.44 | Длительность: 12:31:00
Лекция 9:

Обеспечение безопасности в бизнес-приложений, созданных с помощью Lightswitch 2011

Таким образом, для использования механизмов контроля доступа необходимо, чтобы пользователь прошел первичную аутентификацию. Для обеспечения возможности отладки приложений с контролем доступа LightSwitch IDE использует собственный механизм аутентификации. На этапе разработки не требуется информация о пользователе (его роль и разрешения), вместо этого достаточно установить разрешения которые разработчик хочет иметь на этапе тестирования.

Для включения настроек безопасности и их настройки необходимо выполнить следующие действия

  1. Запустить LightSwitch и открыть проект.
  2. В Инспекторе проекта выполнить двойной щелчок по пункту Свойства и открыть окно свойств проекта и выбрать там вкладку Управление доступом ( рис. 18.1).
    Выбор способа управления доступом

    увеличить изображение
    Рис. 18.1. Выбор способа управления доступом
  3. Установить опцию Использовать проверку подлинности с помощью форм.
  4. Выбрать Добавить новое разрешение в таблице пользовательских разрешений и напечатать Администратор, также напечатать это же в столбце Отображаемое имя, и установить флажок Предоставлено для отладки. ( рис. 18.2)
    Установка свойства Предоставлено для отладки

    увеличить изображение
    Рис. 18.2. Установка свойства Предоставлено для отладки
  5. Перейдите на вкладку Переход по экранам, выполните щелчок правой кнопкой по элементу Студенты По Группам и выберите команду Изменить код СтудентыПоГруппам_CanRun из контекстного меню ( рис. 18.3).
    Переход к изменению кода

    увеличить изображение
    Рис. 18.3. Переход к изменению кода
  6. Вставьте указанный ниже код в метод СтудентыПоГруппам_CanRun
            partial void СтудентыПоГруппам_CanRun(ref bool result)
            {
                // Присвоение результату значения нужного поля
                result = User.HasPermission (Permissions.Администратор);
            }
    
  7. Повторите указанные в предыдущем пункте действия для других форм.
  8. Запустите приложение и убедитесь, что доступ к указанным экранам возможен.

Отключите флажок Предоставлено для отладки у разрешения Администратор и повторно запустите приложение, убедитесь, что доступ к экранам не возможен и эти формы отсутствуют в списке экранов.

Существуют различные объекты, на которые в LightSwitch можно установить контроль доступа. Можно выделить следующие основные их категории:

  • таблицы, созданные внутри LightSwitch;
  • таблицы, полученные из внешнего источника данных;
  • запросы;
  • экраны;
  • каналы доступа.

Имя метода контроля доступа состоит из двух частей: <имя объекта>_<название разрешения>. Имя объекта это название сущности (таблицы или запроса) или название экрана для которого устанавливается контроль доступа. Методы контроля доступа не возвращают значений, но у них имеется один параметр под названием result, передаваемый по ссылке и имеющий тип Boolean. Если метод контроля доступа не определён или его тело пустое, то это эквивалентно тому, что параметр result установлен в значение True и позволяет выполниться заращиваемой операции. Для того чтобы запретить выполнение операции необходимо установить параметр result в значение False.

Для определения кода метода контроля доступа необходимо открыть связанный объект в дизайнере и используя кнопку Записать код перейти в редактор кода, а там выбрать необходимый метод контроля доступа из списка.

Различные объекты имеют различные возможности по контролю доступа так для сущностей доступны методы вставки, удаления, обновления, добавления для запросов, экранов и безопасных каналов можно контролировать возможность их выполнения.

В систематизированном виде это представлено в таблице 18.2 .

Таблица 18.2. Типы обработчиков для различных объектов LightSwitch
Объект Метод Описание метода
Таблица 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;
  • Использовать проверку подлинности с помощью форм;
  • Не включать проверку подлинности.