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)
Параметры
Объект 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) разделе Перегрузка метода .