Поделиться через


WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Метод

Определение

AuthorizeWebPart Вызывает событие и вызывает обработчик события, если он существует.

protected:
 virtual void OnAuthorizeWebPart(System::Web::UI::WebControls::WebParts::WebPartAuthorizationEventArgs ^ e);
protected virtual void OnAuthorizeWebPart(System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventArgs e);
abstract member OnAuthorizeWebPart : System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventArgs -> unit
override this.OnAuthorizeWebPart : System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventArgs -> unit
Protected Overridable Sub OnAuthorizeWebPart (e As WebPartAuthorizationEventArgs)

Параметры

e
WebPartAuthorizationEventArgs

Объект, WebPartAuthorizationEventArgs содержащий данные о событиях.

Примеры

В следующем примере кода показано, как настроить настраиваемый обработчик событий для AuthorizeWebPart события, чтобы обработчик может предоставить пользовательский код фильтрации для OnAuthorizeWebPart метода. Этот пример является типичным способом для разработчика страницы, чтобы предоставить сценарий фильтрации и авторизацию WebPart элементов управления, добавляемых на страницу.

На веб-странице обратите внимание, что <asp:webpartmanager> элемент имеет OnAuthorizeWebPart атрибут с именем обработчика событий, назначенным ему. Метод проверяет, имеют admin ли элементы управления на странице соответствующие AuthorizationFilter значения свойств и, если да, возвращаютсяtrue, что означает, что они будут авторизованы и добавлены на страницу.

Замечание

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

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  
  protected void mgr1_AuthorizeWebPart(object sender, 
    WebPartAuthorizationEventArgs e)
  {
    if (!String.IsNullOrEmpty(e.AuthorizationFilter))
    {
      if (e.AuthorizationFilter == "user")
        e.IsAuthorized = true;
      else
        e.IsAuthorized = false;
    }
  }
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr1" runat="server"
        OnAuthorizeWebPart="mgr1_AuthorizeWebPart" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <asp:BulletedList 
            ID="BulletedList1" 
            Runat="server"
            DisplayMode="HyperLink" 
            Title="Favorite Links"
            AuthorizationFilter="admin">
            <asp:ListItem Value="http://msdn.microsoft.com">
              MSDN
            </asp:ListItem>
            <asp:ListItem Value="http://www.asp.net">
              ASP.NET
            </asp:ListItem>
            <asp:ListItem Value="http://www.msn.com">
              MSN
            </asp:ListItem>
          </asp:BulletedList>
          <asp:Label ID="Label1" runat="server" 
            Text="Hello World"
            Title="Filter Test"
            AuthorizationFilter="admin" />
          <asp:Calendar ID="Calendar1" runat="server" 
            Title="My Calendar"/>
        </ZoneTemplate>
      </asp:WebPartZone>
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  
  Protected Sub mgr1_AuthorizeWebPart(ByVal sender As Object, _
    ByVal e As WebPartAuthorizationEventArgs)
    
    If Not String.IsNullOrEmpty(e.AuthorizationFilter) Then
      If e.AuthorizationFilter = "user" Then
        e.IsAuthorized = True
      Else
        e.IsAuthorized = False
      End If
    End If

  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr1" runat="server" 
        OnAuthorizeWebPart="mgr1_AuthorizeWebPart" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <asp:BulletedList 
            ID="BulletedList1" 
            Runat="server"
            DisplayMode="HyperLink" 
            Title="Favorite Links"
            AuthorizationFilter="admin">
            <asp:ListItem Value="http://msdn.microsoft.com">
              MSDN
            </asp:ListItem>
            <asp:ListItem Value="http://www.asp.net">
              ASP.NET
            </asp:ListItem>
            <asp:ListItem Value="http://www.msn.com">
              MSN
            </asp:ListItem>
          </asp:BulletedList>
          <asp:Label ID="Label1" runat="server" 
            Text="Hello World"
            Title="Filter Test"
            AuthorizationFilter="admin" />
          <asp:Calendar ID="Calendar1" runat="server" 
            Title="My Calendar"/>
        </ZoneTemplate>
      </asp:WebPartZone>
    </div>
    </form>
</body>
</html>

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

Protected Sub WebPartManager1_AuthorizeWebPart(ByVal sender _
  As Object, ByVal e As WebPartAuthorizationEventArgs)

  If String.IsNullOrEmpty(e.AuthorizationFilter) Then
    If Roles.IsUserInRole(Page.User.Identity.Name, _
      e.AuthorizationFilter) Then

      e.IsAuthorized = True
    Else
      e.IsAuthorized = False
    End If
  End If

End Sub
protected void mgr1_AuthorizeWebPart(object sender,
  WebPartAuthorizationEventArgs e)
{
  if (!String.IsNullOrEmpty(e.AuthorizationFilter))
  {
    if(Roles.IsUserInRole(Page.User.Identity.Name, e.authorizationFilter))
      e.IsAuthorized = true;
    else
      e.IsAuthorized = false;
  }
}

Комментарии

Метод OnAuthorizeWebPart вызывается методом IsAuthorized , когда WebPart элемент управления проверяется для добавления авторизации на страницу. OnAuthorizeWebPart При вызове метода вызывается AuthorizeWebPart событие и при наличии метода обработчика для события вызывается обработчик.

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

Механизмы фильтрации элементов управления во время авторизации — это AuthorizationFilter свойство WebPart элементов управления, IsAuthorized методов и OnAuthorizeWebPartAuthorizeWebPart событие элемента WebPartManager управления.

Чтобы создать сценарий фильтрации, по сути, есть две задачи. Сначала вы назначаете строки свойству AuthorizationFilter каждого WebPart элемента управления, который требуется отфильтровать. Эти строковые значения могут быть произвольными, но они должны содержать критерии, на которые вы хотите отфильтровать. Например, если вы хотите добавить заданный элемент управления в зону только в том случае, если пользователь администратора просматривает страницу, можно назначить строковое значение admin свойства. Затем можно использовать функцию ASP.NET ролей и добавить всех пользователей сайта в различные роли, такие как администратор, менеджер и пользователь. При загрузке страницы код фильтрации проверяет, какая роль находится пользователь, сравнивает его со значением фильтра авторизации для проверяемого элемента управления, и если (например, пользователь находится в роли администратора и вы установили значение adminэлемента управленияAuthorizationFilter), элемент управления можно добавить.

Второй этап создания сценария фильтрации заключается в написании кода для проверки AuthorizationFilter значений свойств элементов WebPart управления и определения того, авторизован ли каждый элемент управления перед добавлением в зону. Существует два варианта размещения этого кода фильтрации. Первый вариант — предпочтительный вариант для разработчиков страниц. Можно создать метод для обработки AuthorizeWebPart события непосредственно в коде скрипта сервера веб-страницы или в файле разделения кода. Свяжите метод с событием, добавив OnAuthorizeWebPart атрибут в тег элемента WebPartManager управления на странице, как показано в следующем примере кода разметки.

<asp:webpartmanager id="manager1" runat="server"
   OnAuthorizeWebPart="manager1_AuthorizeWebPart" />

Все, что должен сделать пользовательский метод, — проверить каждый WebPart элемент управления для критериев фильтрации, а затем на основе результатов назначьте логическое значение IsAuthorized свойству WebPartAuthorizationEventArgs объекта, чтобы указать, можно ли WebPart добавить элемент управления. Код в разделе "Пример" демонстрирует, как это сделать.

Второй вариант размещения кода фильтрации — наследовать от WebPartManager класса и переопределить метод, чтобы проверить критерии фильтра. Два метода, которые можно переопределить для этого, являются WebPartManager.IsAuthorized(Type, String, String, Boolean) методом или методом OnAuthorizeWebPart . Хотя любой метод будет работать, в большинстве случаев предпочтительнее переопределить IsAuthorized метод, так как он обеспечивает более широкий программный контроль над всем процессом авторизации, в то время OnAuthorizeWebPart как метод выполняет только одну конкретную задачу, которая заключается в том, чтобы вызвать событие и проверить наличие обработчика. Пример кода пользовательского WebPartManager класса, который переопределяет IsAuthorized метод, см. в перегрузке WebPartManager.IsAuthorized(Type, String, String, Boolean) метода.

Применяется к

См. также раздел