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


WebPartManager.IsAuthorized Метод

Определение

Определяет, можно ли добавить на страницу объект WebPart или другой серверный элемент управления.

Перегрузки

IsAuthorized(WebPart)

Выполняет начальные действия по определению, авторизован ли элемент управления для добавления на страницу.

IsAuthorized(Type, String, String, Boolean)

Выполняет завершающие действия по определению, авторизован ли элемент управления для добавления на страницу.

Комментарии

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

В следующих распространенных сценариях набор элементов управления веб-частей пытается добавить серверные элементы управления на страницу, и IsAuthorized вызывается метод для их авторизации:

  • При добавлении серверного элемента управления путем его объявления в разметке веб-страницы в WebPartZoneBase пределах зоны.

  • При добавлении серверного элемента управления в зону программным способом.

  • Когда пользователь импортирует серверный элемент управления в каталог веб-частей элементов управления.

  • При загрузке существующего серверного элемента управления из хранилища данных персонализации.

  • Когда серверный элемент управления добавляется в DeclarativeCatalogPart элемент управления, чтобы сделать его доступным в каталоге серверных элементов управления.

В каждом сценарии, в котором добавляются элементы управления, IsAuthorized вызывается метод , чтобы убедиться, что выполнены все критерии авторизации, чтобы можно было добавить элемент управления. Когда элемент управления авторизован, он добавляется обычным образом, как и при отсутствии сценария фильтрации. Если элемент управления не авторизован, набор элементов управления веб-частей может реагировать несколькими способами в зависимости от контекста. Набор элементов управления может автоматически не добавлять несанкционированную часть (если нет необходимости информировать пользователя), он может отображать сообщение об ошибке или добавлять экземпляр класса в UnauthorizedWebPart качестве заполнителя. Этот объект-заполнитель не отображается на странице, но отображается в исходном коде страницы, что указывает на исключение несанкционированного элемента управления.

Определяющим, авторизован ли элемент управления, является фильтр авторизации. Фильтр авторизации — это функция в наборе элементов управления веб-частей, которая позволяет разработчикам исключать из страницы любые элементы управления, которые не соответствуют указанным критериям.

Чтобы создать сценарий фильтрации, разработчики должны выполнить два действия. Во-первых, они должны присвоить строковое значение (значение может быть произвольным) свойству AuthorizationFilter каждого WebPart элемента управления, который планируется использовать в сценарии. Они также могут присваивать этому свойству значение для других типов серверных элементов управления, которые не WebPart являются элементами управления, так как если они размещены в WebPartZoneBase зонах, такие элементы управления упаковываются GenericWebPart в элемент управления во время выполнения, и этот элемент управления наследует AuthorizationFilter свойство .

Второй необходимый шаг для создания сценария фильтрации — переопределение IsAuthorized(Type, String, String, Boolean) метода или создание обработчика AuthorizeWebPart события. В этих методах разработчик может проверить AuthorizationFilter свойство , и если значение указывает, что элемент управления не должен быть авторизован, разработчик гарантирует, что IsAuthorized метод возвращает значение false.

Примечание

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

IsAuthorized(WebPart)

Выполняет начальные действия по определению, авторизован ли элемент управления для добавления на страницу.

public:
 bool IsAuthorized(System::Web::UI::WebControls::WebParts::WebPart ^ webPart);
public bool IsAuthorized (System.Web.UI.WebControls.WebParts.WebPart webPart);
member this.IsAuthorized : System.Web.UI.WebControls.WebParts.WebPart -> bool
Public Function IsAuthorized (webPart As WebPart) As Boolean

Параметры

webPart
WebPart

Объект WebPart или другой серверный элемент управления, для которого проверяется авторизация.

Возвращаемое значение

Логическое значение, указывающее, можно ли добавить на страницу параметр webPart.

Исключения

webPart имеет значение null.

Примеры

В следующем примере кода показано, как вызвать IsAuthorized(WebPart) метод из кода, чтобы определить, авторизован ли элемент управления для добавления на страницу.

Пример кода состоит из трех частей:

  • Пользовательский WebPartManager элемент управления, который переопределяет IsAuthorized метод .

  • Веб-страница, создающая фильтр для WebPart элемента управления.

  • Описание выполнения примера кода.

В этом примере кода используется пользовательский WebPartManager элемент управления, который переопределяет IsAuthorized(Type, String, String, Boolean) метод перегрузки, чтобы обеспечить пользовательскую обработку AuthorizationFilter свойства . Этот элемент управления проверяет значение admin свойства и, если оно присутствует, авторизует элемент управления. Если элемент управления имеет другое значение, он не авторизован; Элементы управления без значения свойства также авторизованы, так как предполагается, что они не являются частью сценария фильтрации.

Чтобы выполнить этот пример кода, необходимо скомпилировать этот исходный код. Вы можете скомпилировать его явным образом и поместить полученную сборку в папку Bin веб-сайта или глобальный кэш сборок. Кроме того, исходный код можно поместить в папку App_Code сайта, где он будет динамически компилироваться во время выполнения. В этом примере кода используется метод динамической компиляции. Пошаговое руководство по компиляции см. в разделе Пошаговое руководство. Разработка и использование пользовательского серверного веб-элемента управления.

using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS.Controls
{
  public class MyManagerAuthorize : WebPartManager
  {
    public override bool IsAuthorized(Type type, string path, string authorizationFilter, bool isShared)
    {
      if (!String.IsNullOrEmpty(authorizationFilter))
      {
        if (authorizationFilter == "admin")
          return true;
        else
          return false;
      }
      else
            {
                return true;
            }
        }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class MyManagerAuthorize
    Inherits WebPartManager

    Public Overrides Function IsAuthorized(ByVal type As Type, _
      ByVal path As String, ByVal authorizationFilter As String, _
      ByVal isShared As Boolean) As Boolean

      If Not String.IsNullOrEmpty(authorizationFilter) Then
        If authorizationFilter = "admin" Then
          Return True
        Else
          Return False
        End If
      Else
        Return True
      End If

    End Function

  End Class

End Namespace

Во второй части примера кода создается фильтр, который потенциально может исключить элемент управления. Следующая веб-страница содержит три ASP.NET серверных элементов управления в элементе <asp:webpartzone> . Обратите внимание, что свойства первого и второго элементов управления AuthorizationFilter имеют разные значения, а третий не назначает свойство . Это значение авторизации можно проверить во время выполнения, а элемент управления можно добавить на страницу, если фильтр соответствует критериям, заданным разработчиком. Обратите внимание, что в методе Page_Load код вызывает IsAuthorized(WebPart) метод , чтобы определить, авторизован ли каждый из элементов управления, и если да, он задает свойство каждого элемента управления ExportMode .

<%@ Page Language="C#" %>
<%@ Register Namespace="Samples.AspNet.CS.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(object sender, EventArgs e)
  {
    foreach (WebPart part in mgr1.WebParts)
    {
      if (mgr1.IsAuthorized(part))
        part.ExportMode = WebPartExportMode.All;
    }
    
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <aspSample:MyManagerAuthorize ID="mgr1" runat="server"  />
      <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"
            AuthorizationFilter="user" />
          <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register Namespace="Samples.AspNet.VB.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    Dim part As WebPart
    For Each part In mgr1.WebParts
      If mgr1.IsAuthorized(part) Then
        part.ExportMode = WebPartExportMode.All
      End If
    Next
  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <aspSample:MyManagerAuthorize ID="mgr1" runat="server"  />
      <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"
            AuthorizationFilter="user" />
          <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>

Обратите внимание, что для работы примера кода необходимо добавить параметр в файл Web.config, чтобы включить экспорт файлов описания веб-частей. Убедитесь, что у вас есть файл Web.config в том же каталоге, что и веб-страница для этого примера кода. Убедитесь, что в <system.web> разделе есть <webParts> элемент с атрибутом enableExport , равным true, как показано в следующей разметке.

<webParts enableExport="true">

...

</webParts>

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

Комментарии

Метод IsAuthorized является начальным методом, вызываемым набором элементов управления веб-частей для проверки авторизации для WebPart элемента управления. Он принимает webPart в качестве параметра и начинает процесс, который в конечном итоге определяет, будет ли элемент управления добавлен на страницу. Вызывайте этот метод непосредственно из кода, когда необходимо определить, авторизован ли данный элемент управления.

Этот метод выполняет начальные задачи по определению того, наследует ли элемент управления от WebPart класса или является элементом GenericWebPart управления, и, если да, какой тип дочернего элемента управления он содержит. Чтобы завершить задачу авторизации, он вызывает метод перегрузки IsAuthorized(Type, String, String, Boolean) .

Примечания для тех, кто вызывает этот метод

Этот метод вызывается непосредственно из кода. Если вы хотите получить больший программный контроль над процессом авторизации, можно переопределить метод перегрузки IsAuthorized(Type, String, String, Boolean) .

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

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

IsAuthorized(Type, String, String, Boolean)

Выполняет завершающие действия по определению, авторизован ли элемент управления для добавления на страницу.

public:
 virtual bool IsAuthorized(Type ^ type, System::String ^ path, System::String ^ authorizationFilter, bool isShared);
public virtual bool IsAuthorized (Type type, string path, string authorizationFilter, bool isShared);
abstract member IsAuthorized : Type * string * string * bool -> bool
override this.IsAuthorized : Type * string * string * bool -> bool
Public Overridable Function IsAuthorized (type As Type, path As String, authorizationFilter As String, isShared As Boolean) As Boolean

Параметры

type
Type

Тип Type элемента управления, для которого проверяется авторизация.

path
String

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

authorizationFilter
String

Произвольное строковое значение, которое присваивается свойству AuthorizationFilter элемента управления WebPart и используется для авторизации добавления элемента управления на страницу.

isShared
Boolean

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

Возвращаемое значение

Логическое значение, указывающее, авторизован ли элемент управления для добавления на страницу.

Исключения

type имеет значение null.

Параметр type — это пользовательский элемент управления, а path равен или null или пустой строке ("").

-или-

type не является пользовательским элементом управления, а path содержит назначенное для него значение.

Примеры

В следующем примере кода показано, как переопределить IsAuthorized метод , чтобы определить, авторизован ли элемент управления для добавления на страницу.

Первым шагом является создание фильтра, который потенциально может исключить элемент управления. Следующая веб-страница содержит три ASP.NET серверных элементов управления в элементе <asp:webpartzone> . Обратите внимание, что свойства первого и второго элементов управления AuthorizationFilter имеют разные значения, а третий не назначает свойство . Это значение авторизации можно проверить во время выполнения, а элемент управления можно добавить на страницу, если фильтр соответствует критериям, заданным разработчиком.

<%@ Page Language="C#" %>
<%@ Register Namespace="Samples.AspNet.CS.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(object sender, EventArgs e)
  {
    foreach (WebPart part in mgr1.WebParts)
    {
      if (mgr1.IsAuthorized(part))
        part.ExportMode = WebPartExportMode.All;
    }
    
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <aspSample:MyManagerAuthorize ID="mgr1" runat="server"  />
      <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"
            AuthorizationFilter="user" />
          <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register Namespace="Samples.AspNet.VB.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    Dim part As WebPart
    For Each part In mgr1.WebParts
      If mgr1.IsAuthorized(part) Then
        part.ExportMode = WebPartExportMode.All
      End If
    Next
  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <aspSample:MyManagerAuthorize ID="mgr1" runat="server"  />
      <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"
            AuthorizationFilter="user" />
          <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>

Второй шаг — переопределить IsAuthorized(Type, String, String, Boolean) метод и создать пользовательскую обработку для фильтров авторизации. Обратите внимание, что код сначала проверяет, имеет ли свойство значение, чтобы любой элемент управления, не назначаемый свойству AuthorizationFilter , добавлялся автоматически. Если элемент управления имеет фильтр, код возвращает только true в том случае, если значение фильтра равно admin. Это демонстрирует простой механизм, который можно использовать для отображения определенных элементов управления определенным пользователям в зависимости от их роли. Хотя полный пример использования ролей выходит за рамки этого раздела, можно использовать ту же логику, что и переопределенный метод в этом примере кода, за исключением того, что можно проверить, является ли текущий пользователь ролью, которая соответствует значению фильтра авторизации, и добавить элемент управления только для этого пользователя. Это позволит создавать страницы, на которых некоторые пользователи будут видеть все элементы управления, а другие — только выбранные элементы управления. Вот как может выглядеть логика, проверяющая фильтр, если вы использовали роли:

If Roles.IsUserInRole(Page.User.Identity.Name, authorizationFilter) Then  
  return True  
Else  
  return False  
End If  
if(Roles.IsUserInRole(Page.User.Identity.Name, authorizationFilter))  
    return true;  
else  
    return false;  

Чтобы выполнить пример кода, необходимо скомпилировать этот исходный код. Вы можете скомпилировать его явным образом и поместить полученную сборку в папку Bin веб-сайта или глобальный кэш сборок. Кроме того, исходный код можно поместить в папку App_Code сайта, где он будет динамически компилироваться во время выполнения. В этом примере кода используется метод динамической компиляции. Пошаговое руководство по компиляции см. в разделе Пошаговое руководство. Разработка и использование пользовательского серверного веб-элемента управления.

using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS.Controls
{
  public class MyManagerAuthorize : WebPartManager
  {
    public override bool IsAuthorized(Type type, string path, string authorizationFilter, bool isShared)
    {
      if (!String.IsNullOrEmpty(authorizationFilter))
      {
        if (authorizationFilter == "admin")
          return true;
        else
          return false;
      }
      else
            {
                return true;
            }
        }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class MyManagerAuthorize
    Inherits WebPartManager

    Public Overrides Function IsAuthorized(ByVal type As Type, _
      ByVal path As String, ByVal authorizationFilter As String, _
      ByVal isShared As Boolean) As Boolean

      If Not String.IsNullOrEmpty(authorizationFilter) Then
        If authorizationFilter = "admin" Then
          Return True
        Else
          Return False
        End If
      Else
        Return True
      End If

    End Function

  End Class

End Namespace

После загрузки страницы в браузере отобразится первый элемент управления, так как он соответствует условиям в переопределенном методе. Второй элемент управления не добавляется на страницу, так как его значение фильтра исключается. Третий элемент управления добавляется, так как свойство не задано AuthorizationFilter . Если изменить значение свойства во втором элементе управления в соответствии с значением первого элемента управления, а затем снова запустить страницу, будет добавлен и второй элемент управления.

Комментарии

Метод IsAuthorized(Type, String, String, Boolean) перегрузки выполняет последние шаги по определению того, разрешен ли элемент управления для добавления на страницу. Метод гарантирует, что type является допустимым типом и path имеет значение только в том случае, если проверяемый элемент управления является пользовательским элементом управления. Затем вызывается критический OnAuthorizeWebPart метод, который вызывает AuthorizeWebPart событие .

Примечания для тех, кто наследует этот метод

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

Для разработчиков страниц, которые также хотят проверить фильтры авторизации и предоставить пользовательскую обработку, существует возможность сделать это встроенное на странице .aspx или в файле кода программной части без необходимости наследовать от каких-либо классов. На странице OnAuthorizeWebPart(WebPartAuthorizationEventArgs) для метода элемента управления можно объявить альтернативный WebPartManager обработчик событий. Дополнительные сведения и пример см. в описании OnAuthorizeWebPart(WebPartAuthorizationEventArgs) метода .

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

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