Между тяжелыми задачами разработки легко потратить некоторое время на изучение чего-то. Я обнаружил, что на машине есть несколько примеров содержимого System.Security. Я никогда раньше не использовал это пространство имен, поэтому я просто использовал его, чтобы узнать о нем. Поскольку это не систематическое исследование, его нелегко организовать. Поразмыслив, я объясню это на примерах.
1. Установите разрешение
1[FileIOPermission(SecurityAction.Demand, Write="C:\temp.txt")]
2. Приложение общедоступного класса: System.Windows.Forms.Form.
3{
4 // опущено
5}
FileIOPermissionAttribute определяется в System.Security.Permissions. Он наследуется от SecurityAttribute. В этом примере при использовании класса App необходимы разрешения на запись в файл C:temp.txt.
В документации .net framework о требованиях безопасности говорится следующее: «Чтобы гарантировать, что только вызывающие объекты, которым предоставлены определенные разрешения, могут вызывать ваш код, вы можете объявить или обеспечить, чтобы вызывающие элементы вашего кода имели определенные разрешения. Или набор разрешений. Требования вызывают среда выполнения выполняет проверку безопасности, тем самым обеспечивая соблюдение ограничений для вызывающего кода. Во время проверки безопасности среда выполнения проходит через стек вызовов, проверяет разрешения каждого вызывающего объекта в стеке и определяет, были ли предоставлены запрошенные разрешения. Если обнаружено, что вызывающий объект не имеет необходимых разрешений, проверка безопасности завершается неудачей и выдается исключение SecurityException.
В этом примере объявляются разрешения. SecurityAction.Demand может действовать на класс или метод, в данном случае он действует на класс. Write — одно из свойств FileIOPermission. Другие часто используемые свойства включают Read, Append, All и т. д.
В перечислении SecurityAction также есть некоторые значения, которые действуют на сборку. Например, следующий пример:
[assembly:SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode=true)]
SecurityAction.RequestMinimum — это минимальное разрешение для выполнения запроса. Эта строка требует, чтобы сборка разрешала вызовы неуправляемого кода.
Помимо декларативного метода вы также можете использовать обязательный метод. Следующий код:
1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2попробуй
3{
4 filePerm.Demand();
5
6 // Здесь находится код доступа к файлу
7}
8catch (исключение SecurityException)
9{
10 MessageBox.Show (искл.Сообщение);
11 возврат;
12}
13
2. Управление ролями пользователей
Управление пользователями и их ролями используется во многих программах. Сегодня asp.net 2.0 значительно расширил этот аспект, и разработчики могут создавать очень хорошие приложения, не разбираясь в технологиях. Однако для приложений Windows Form многие места по-прежнему приходится устанавливать самим программистам.
Предполагая, что мы уже знаем имя пользователя и роли, которым оно принадлежит, мы можем установить принципала текущего потока следующим образом:
1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = новый GenericPrincipal (genIdent, роли);
3Thread.CurrentPrincipal = genPrin;
4
Тогда у нас есть три способа проверки ролей пользователей.
Первый метод — использовать метод GenericPrincipal.IsInRole:
1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("Менеджер"))
4{
5 // опущено
6}
7
Второй метод — использовать класс PrincipalPermission, который аналогичен обязательному методу в настройке разрешений:
1PrincipalPermission prinPerm = new PrincipalPermission(null, «Manager»);
2
3попробуй
4{
5 prinPerm.Demand();
6
7 //сделай что-нибудь
8}
9поймать
10{
11 //обработка ошибок
12}
Третий метод аналогичен методу объявления в настройке разрешений:
1private void DecPermButton_Click(отправитель объекта, System.EventArgs e)
2{
3 попробовать
4 {
5 выполнитьМенеджерДействие();
6 // сделать что-то
7}
8 уловов
9 {
10 // обработка ошибок
11 }
12}
13
14[PrincipalPermission(SecurityAction.Demand, Role="Менеджер")]
15void выполнитьManagerAction()
16{
17}
Еще одна важная вещь, связанная с безопасностью, — это шифрование. У меня нет времени писать сегодня, я расскажу об этом в другой день.