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 равно 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:webpartzone> веб-странице содержатся три элемента управления сервера ASP.NET. Обратите внимание, что первые и второй элементы управления имеют свойства 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>trueатрибутов enableExport имеет значение , как показано в следующей разметке.
<webParts enableExport="true">
...
</webParts>
После загрузки страницы в браузере обратите внимание, что отображается первый элемент управления, так как он соответствует критериям в переопределенном методе. Второй элемент управления не добавляется на страницу, так как он исключается фильтром. Третий элемент управления также добавляется, так как он не имеет его AuthorizationFilter набора свойств. Обратите внимание, что если щелкнуть значок меню команд в строке заголовка любого элемента управления, они могут экспортироваться из-за назначения соответствующих ExportMode значений свойств.
Комментарии
Метод IsAuthorized — это начальный метод, вызываемый элементом управления веб-частей для проверки авторизации элемента WebPart управления. Он принимает webPart в качестве параметра и начинает процесс, который в конечном итоге определяет, будет ли элемент управления добавлен на страницу. Вызовите этот метод из кода непосредственно, когда необходимо определить, авторизован ли данный элемент управления.
Этот метод выполняет начальные задачи определения того, наследует ли элемент управления от WebPart класса или является элементом GenericWebPart управления, а если да, то какой тип дочернего элемента управления он содержит. Чтобы завершить задачу авторизации, вызывается IsAuthorized(Type, String, String, Boolean) метод перегрузки.
Примечания для тех, кто вызывает этот метод
Этот метод вызывается непосредственно из кода. Если вы хотите получить более широкий программный контроль над процессом IsAuthorized(Type, String, String, Boolean) авторизации, можно переопределить метод перегрузки.
См. также раздел
- AuthorizationFilter
- AuthorizeWebPart
- OnAuthorizeWebPart(WebPartAuthorizationEventArgs)
- элементы управления веб-частей ASP.NET
Применяется к
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
Параметры
- path
- String
Относительный путь приложения к исходному файлу для авторизованного элемента управления, если элемент управления является пользовательским элементом управления.
- authorizationFilter
- String
Произвольное строковое значение, назначенное AuthorizationFilter свойству WebPart элемента управления, используемое для авторизации возможности добавления элемента управления на страницу.
- isShared
- Boolean
Указывает, является ли элемент управления, проверяемый для авторизации, общим элементом управления, что означает, что он отображается для многих или всех пользователей приложения, а его IsShared значение свойства задано true.
Возвращаемое значение
Логическое значение, указывающее, разрешен ли элемент управления для добавления на страницу.
Исключения
type равно null.
type — это пользовательский элемент управления, а pathnull также пустая строка ("").
–или–
type не является пользовательским элементом управления и path имеет значение, назначенное ему.
Примеры
В следующем примере кода показано, как переопределить IsAuthorized метод, чтобы определить, авторизован ли элемент управления для добавления на страницу.
Первым шагом является создание фильтра, который может потенциально исключить элемент управления. На следующей <asp:webpartzone> веб-странице содержатся три элемента управления сервера ASP.NET. Обратите внимание, что первые и второй элементы управления имеют свойства 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) .
См. также раздел
- AuthorizationFilter
- AuthorizeWebPart
- OnAuthorizeWebPart(WebPartAuthorizationEventArgs)
- элементы управления веб-частей ASP.NET