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


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 атрибут с назначенным ему именем обработчика событий. Метод проверяет, имеют AuthorizationFilter ли соответствующие значения admin свойств для элементов управления на странице, и, если да, возвращает 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 методы и OnAuthorizeWebPart , а AuthorizeWebPart также событие элемента WebPartManager управления .

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

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

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

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

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

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

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