Основные сведения об управлении ролями

Visual Studio 2010

Обновлен: Ноябрь 2007

Управление ролями помогает управлять авторизацией, что позволяет указать, к каким ресурсам разрешен доступ различным пользователям в приложении. Благодаря управлению ролями можно обрабатывать группы пользователей как единое целое путем присвоения пользователей ролям, например, роли руководителя, продавца, участника и т. д. (В Windows роли создаются с помощью назначения пользователей группам, например «Администраторы», «Опытные пользователи» и т. д.)

После задания ролей в приложении можно создать правила доступа. Например, узел может включать в себя набор страниц, которые необходимо отображать только для членов. Аналогично может потребоваться отобразить или скрыть часть страницы в зависимости от того, является ли текущий пользователь руководителем. С помощью ролей можно задавать эти типы правил независимо от отдельных пользователей приложения. Например, не нужно предоставлять отдельным членам узла доступ к страницам, предназначенным только для членов. Вместо этого можно предоставить такой доступ роли члена и просто добавлять и удалять пользователей из этой роли по мере регистрации новых пользователей или ожидать истечения срока действия их членства.

Пользователи могут принадлежать к нескольким ролям. Например, если веб-узел является форумом, то некоторые пользователи могут быть как в роли членов, так и в роли модераторов. Можно определить каждой роли различные права на веб-узле, и пользователь, который имеет обе роли, будет иметь оба набора прав.

Даже если приложением пользуются всего несколько пользователей, создание ролей все равно может быть удобным. Роли предоставляют гибкость в изменении прав и добавлении и удалении пользователей без внесения изменений непосредственно на веб-узле. При создании для приложения большого числа прав доступа роли удобно использовать для применения изменений для групп пользователей.

Основной целью задания ролей является обеспечение удобного способа управления правилами доступа для групп пользователей. Вы создаете пользователей, а затем назначаете их ролям (в Windows — группам). Обычно затем создается набор страниц, доступ к которым должны иметь только определенные пользователи. Часто эти страницы помещаются в отдельную папку. После этого можно задать правила, предоставляющие и запрещающие доступ к запрещенным папкам. Например, можно настроить веб-узел таким образом, чтобы члены или руководители имели доступ к страницам в запрещенной папке, а все остальные пользователи — нет. Если неавторизованный пользователь попытается просмотреть запрещенную страницу, то он увидит сообщение об ошибке или будет перенаправлен на указанную вами страницу.

Для работы с ролями необходимо иметь возможность идентификации пользователей в приложении, чтобы определять их принадлежность к определенным ролям. Существует два способа настройки приложения на использование удостоверения пользователя: проверка подлинности Windows и проверка подлинности с помощью форм. Если приложение выполняется в локальной сети (то есть в доменном приложении интрасети), пользователей можно идентифицировать по имени их учетной записи домена Windows. В этом случае роли пользователя являются группами Windows, к которым он принадлежит.

В интернет-приложениях или при других сценариях, где использование учетных записей Windows является нецелесообразным, для идентификации пользователя можно использовать проверку подлинности с помощью форм. Для этого обычно создается страница, на которой пользователи могут вводить имя пользователя и пароль, после чего выполняется проверка этих учетных данных. Для введения удостоверений пользователей можно использовать элементы управления входа ASP.NET или создать страницу входа и воспользоваться классом FormsAuthentication.

5k850zwb.alert_note(ru-ru,VS.100).gifПримечание.

Роли нельзя использовать для пользователей, которые не создали удостоверение в приложении (анонимные пользователи).

При использовании элементов управления входа или проверки подлинности с помощью форм для введения удостоверения пользователя можно также воспользоваться управлением ролями совместно с членством. При этом членство используется для определения пользователей и паролей. После этого можно воспользоваться управлением ролями для определения ролей и назначить им членов. Однако управление ролями никак не зависит от членства. Если в приложении имеется способ задания удостоверения пользователя, управление ролями можно использовать для проверки подлинности.

Доступ к ролям можно получить в качестве службы Windows Communication Framework (WCF) с помощью службы ролей ASP.NET. Служба ролей позволяет проверять роли пользователя из любого приложения, которое поддерживает чтение или использование данных службы WCF. Например, роль пользователя можно проверить из приложения Windows Forms, из веб-приложения или из приложения, которое не использует платформу .NET Framework. Дополнительные сведения о службе ролей см. в разделе Общие сведения о службе ролей Windows Communication Foundation.

Управление ролями можно использовать не только для ограничения прав на страницы и папки. Управление ролями предоставляет API, который можно использовать для программного определения принадлежности пользователя к роли. Это позволяет создавать код, в котором учитываются преимущества ролей, и выполнять прикладные задачи, основываясь не только на том, кем является пользователь, но и к какой роли он принадлежит.

Если в приложении введены удостоверения пользователей, методы API управления ролями можно использовать для создания ролей, добавления пользователей в роли и получения сведений о том, к каким ролям относятся различные пользователи. Эти методы можно использовать для создания собственного интерфейса для управления ролями.

Если в приложении используется проверка подлинности Windows, API управления ролями предлагает меньше возможностей для управления ролями. Например, управление ролями нельзя использовать для создания новых ролей. Вместо этого необходимо использовать средства управления пользователями и группами Windows для создания учетных записей пользователей и групп и назначения пользователей группам. Функция управления ролями может считывать сведения о группах и пользователях Windows и использовать их при проверке подлинности.

Если используется служба ролей ASP.NET, можно проверить, принадлежит ли пользователь к определенной роли, или извлечь сведения о всех ролях данного пользователя. Однако управлять ролями с помощью API службы ролей нельзя.

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

Конфигурация управления ролями

Для использования управления ролями ASP.NET, необходимо включить его в файле Web.config приложения с помощью соответствующей настройки, например:

<roleManager 
    enabled="true" 
    cacheRolesInCookie="true" >
</roleManager>

Обычно роли используются для задания правил, позволяющих разрешать и запрещать доступ к страницам или папкам. Такие правила доступа можно задать в разделе проверки подлинности файла Web.config. В следующем примере показано, как разрешить пользователям, имеющим роль членов, просматривать страницы в папке MemberPages, и запретить эту операцию для всех других пользователей:

<configuration>
  <location path="MemberPages">
    <system.web>
      <authorization>
        <allow roles="members" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <!-- other configuration settings here -->
<configuration>

Дополнительные сведения о настройке правил доступа см. в разделе Авторизация в ASP.NET.

Кроме того, необходимо создать роли, например руководителя или члена, и назначить им идентификаторы пользователей. Если в приложение используется проверка подлинности Windows, то пользователи и группы создаются с помощью инструмента управления компьютером Windows.

Если используется проверка подлинности с помощью форм, пользователей и роли можно задать с помощью средства администрирования веб-узла ASP.NET. При необходимости эту задачу можно выполнить программным образом, вызывая различные методы управления ролями. В следующем примере демонстрируется создание роли members:

Roles.CreateRole("members");

В следующем пример показано, как добавить в роль manager пользователя JoeWorden и как можно одновременно добавить в роль members пользователей JillShrader и ShaiBassli:

Roles.AddUsersToRole("JoeWorden", "manager");
string[] userGroup = new string[2];
userGroup[0] = "JillShrader";
userGroup[1] = "ShaiBassli";
Roles.AddUsersToRole(userGroup, "members");
5k850zwb.alert_note(ru-ru,VS.100).gifПримечание.

Функции управления ролями нельзя использовать через службу ролей ASP.NET. Эта служба ролей может только возвращать информацию о конкретном пользователе.

Работа с ролями во время выполнения

Когда пользователи посещают веб-узел во время выполнения, они получают удостоверение в виде имени учетной записи Windows или посредством входа в приложение. (Если пользователи посещают веб-узел, не выполняя вход (анонимно), у них отсутствует удостоверение, поэтому они не могут находиться в какой-либо роли.) Сведения о зарегистрированном пользователе приложение может получить из свойства User. Если роли разрешены, ASP.NET выполняет поиск ролей текущего пользователя и добавляет их в объект User, чтобы их можно было проверить. В следующем примере показано, как определить, находится ли текущий пользователь в роли члена. Если это так, то отображается кнопка для членов:

if (User.IsInRole("members"))
{
   buttonMembersArea.Visible = True;
}

ASP.NET также создает экземпляр класса RolePrincipal и добавляет его в текущий контекст запроса. Это позволяет программно выполнять задачи управления ролями, например, определять, какие пользователи находятся в определенной роли. . В следующем примере показано, как получить список ролей для текущего пользователя, выполнившего вход.

string[] userRoles = ((RolePrincipal)User).GetRoles();

Если в приложении используется элемент управления LoginView, то он проверяет роли пользователя и может динамически создавать на их основе интерфейс пользователя.

Получение сведений о ролях

Если веб-обозреватель пользователя поддерживает файлы cookie, ASP.NET может сохранять сведения о ролях в зашифрованном файле cookie на компьютере пользователя. При каждом запросе страницы ASP.NET считывает файл cookie и заполняет из него сведения о ролях для этого пользователя. Такой подход снижает до минимума потребность в считывании сведений о ролях из базы данных. Если веб-обозреватель пользователя не поддерживает файлы Cookie или их использование отключено, сведения о ролях кэшируются только в течение каждого запроса к странице.

Показ: