WebPartManager.IsAuthorized Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Avgör om en WebPart eller annan serverkontroll kan läggas till på en sida.
Överlagringar
| Name | Description |
|---|---|
| IsAuthorized(WebPart) |
Utför de första stegen för att avgöra om en kontroll har behörighet att läggas till på en sida. |
| IsAuthorized(Type, String, String, Boolean) |
Utför de sista stegen för att avgöra om en kontroll har behörighet att läggas till på en sida. |
Kommentarer
En del av flexibiliteten i webbdelsfunktionen är möjligheten att lägga till serverkontroller på webbsidor vid körning. Det finns ett antal vanliga scenarier där en serverkontroll (som kan vara en anpassad WebPart kontroll, en anpassad serverkontroll, en användarkontroll eller en ASP.NET kontroll) kan läggas till.
I följande vanliga scenarier försöker kontrolluppsättningen webbdelar lägga till serverkontroller på en sida, och IsAuthorized metoden anropas för att auktorisera dem:
När en serverkontroll läggs till genom att deklarera den i markering av en webbsida i en WebPartZoneBase zon.
När en serverkontroll läggs till programmatiskt i en zon.
När en användare importerar en serverkontroll till en webbdelskatalog med kontroller.
När en befintlig serverkontroll läses in från datalagret för anpassning.
När en serverkontroll läggs till i en DeclarativeCatalogPart kontroll för att göra den tillgänglig i en katalog med serverkontroller.
I varje scenario där kontroller läggs till IsAuthorized anropas metoden för att säkerställa att alla auktoriseringsvillkor har uppfyllts för att tillåta att en kontroll läggs till. När en kontroll har auktoriserats läggs den till normalt som den skulle vara om det inte fanns något filtreringsscenario. När en kontroll inte är auktoriserad kan kontrolluppsättningen webbdelar svara på flera sätt, beroende på kontexten. Kontrolluppsättningen kan tyst misslyckas med att lägga till en obehörig del (om det inte finns något behov av att informera användaren), kan den visa ett felmeddelande eller lägga till en instans av UnauthorizedWebPart klassen som platshållare. Det här platshållarobjektet visas inte på sidan, men visas i sidans källkod för att indikera att en obehörig kontroll har exkluderats.
Avgörande för om en kontroll är auktoriserad är auktoriseringsfiltret. Ett auktoriseringsfilter är en funktion i kontrolluppsättningen Webbdelar som gör det möjligt för utvecklare att undanta alla kontroller som inte uppfyller de angivna kriterierna från en sida.
För att skapa ett filtreringsscenario måste utvecklare göra två saker. Först måste de tilldela ett strängvärde (värdet kan vara godtyckligt) till egenskapen för AuthorizationFilter varje WebPart kontroll som de planerar att använda i scenariot. De kan också tilldela ett värde till den här egenskapen för andra typer av serverkontroller som inte WebPart är kontroller, för om de placeras i WebPartZoneBase zoner omsluts sådana kontroller med en GenericWebPart kontroll vid körning, och den AuthorizationFilter här kontrollen ärver egenskapen.
Det andra nödvändiga steget för att skapa ett filtreringsscenario är att antingen åsidosätta IsAuthorized(Type, String, String, Boolean) metoden eller skapa en händelsehanterare för AuthorizeWebPart händelsen. I dessa metoder kan en utvecklare kontrollera AuthorizationFilter egenskapen och om värdet anger att kontrollen inte ska auktoriseras ser utvecklaren IsAuthorized till att metoden returnerar värdet false.
Note
Kodexempel och en beskrivning av hur du konfigurerar ett anpassat filtreringsscenario med hjälp av IsAuthorized metoden finns i avsnitten för överlagringar av metoden.
IsAuthorized(WebPart)
Utför de första stegen för att avgöra om en kontroll har behörighet att läggas till på en sida.
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
Parametrar
Returer
Ett booleskt värde som anger om webPart kan läggas till på en sida.
Undantag
webPart är null.
Exempel
I följande kodexempel visas hur du anropar IsAuthorized(WebPart) metoden från koden för att avgöra om en kontroll har behörighet att läggas till på en sida.
Kodexemplet har tre delar:
En anpassad WebPartManager kontroll som åsidosätter IsAuthorized metoden.
En webbsida som skapar ett filter för en WebPart kontroll.
En förklaring av hur du kör kodexemplet.
I det här kodexemplet används en anpassad WebPartManager kontroll som åsidosätter IsAuthorized(Type, String, String, Boolean) överlagringsmetoden för att tillhandahålla anpassad hantering av AuthorizationFilter egenskapen. Den här kontrollen söker efter ett egenskapsvärde admin för och auktoriserar kontrollen om värdet finns. Om en kontroll har ett annat värde är den inte auktoriserad. kontroller utan egenskapsvärdet är också auktoriserade, eftersom de antas inte vara en del av filtreringsscenariot.
För att det här kodexemplet ska köras måste du kompilera den här källkoden. Du kan kompilera den explicit och placera den resulterande sammansättningen i webbplatsens bin-mapp eller den globala sammansättningscacheminnet. Du kan också placera källkoden i webbplatsens App_Code mapp, där den kompileras dynamiskt vid körning. I det här kodexemplet används den dynamiska kompileringsmetoden. En genomgång som visar hur du kompilerar finns i Genomgång: Utveckla och använda en anpassad webbserverkontroll.
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
Den andra delen av kodexemplet skapar ett filter som potentiellt kan exkludera en kontroll. Följande webbsida innehåller tre ASP.NET serverkontroller i ett <asp:webpartzone>-element. Observera att de första och andra kontrollerna har sina AuthorizationFilter egenskaper inställda på olika värden och att den tredje inte tilldelar egenskapen. Det här auktoriseringsvärdet kan kontrolleras vid körning och kontrollen kan läggas till på sidan om filtret matchar villkor som angetts av utvecklaren. Observera också att koden i Page_Load metoden anropar IsAuthorized(WebPart) metoden för att avgöra om var och en av kontrollerna är auktoriserad, och i så fall anger den varje kontrolls ExportMode egenskap.
<%@ 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>
Observera att för att kodexemplet ska fungera måste du lägga till en inställning i Web.config-filen för att kunna exportera beskrivningsfiler för webbdelar. Kontrollera att du har en Web.config fil i samma katalog som webbsidan för det här kodexemplet. I avsnittet <system.web> kontrollerar du att det finns ett <webParts> element med ett enableExport attribut inställt på true, som i följande markering.
<webParts enableExport="true">
...
</webParts>
När du har läst in sidan i en webbläsare bör du tänka på att den första kontrollen visas eftersom den matchar kriterierna i den åsidosatta metoden. Den andra kontrollen läggs inte till på sidan eftersom den undantas av filtret. Den tredje kontrollen läggs också till eftersom den inte har någon egenskapsuppsättning AuthorizationFilter . Observera att om du klickar på verbmenyikonen i namnlisten för någon av kontrollerna kan båda exporteras eftersom deras respektive ExportMode egenskapsvärden har tilldelats.
Kommentarer
Metoden IsAuthorized är den första metoden som anropas av kontrollen Webbdelar för att kontrollera auktoriseringen för en WebPart kontroll. Den accepterar webPart som en parameter och påbörjar en process som slutligen avgör om kontrollen ska läggas till på en sida. Anropa den här metoden direkt från koden när du behöver avgöra om en viss kontroll är auktoriserad.
Den här metoden utför de första uppgifterna för att avgöra om kontrollen ärver från WebPart klassen eller är en GenericWebPart kontroll och i så fall vilken typ av underordnad kontroll den innehåller. För att slutföra auktoriseringsuppgiften IsAuthorized(Type, String, String, Boolean) anropas överlagringsmetoden.
Anteckningar till anropare
Den här metoden anropas direkt från koden. Om du vill få större programmatisk kontroll över auktoriseringsprocessen kan du åsidosätta IsAuthorized(Type, String, String, Boolean) överlagringsmetoden.
Se även
- AuthorizationFilter
- AuthorizeWebPart
- OnAuthorizeWebPart(WebPartAuthorizationEventArgs)
- ASP.NET webbdelskontroller
Gäller för
IsAuthorized(Type, String, String, Boolean)
Utför de sista stegen för att avgöra om en kontroll har behörighet att läggas till på en sida.
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
Parametrar
- path
- String
Den relativa programsökvägen till källfilen för kontrollen som auktoriseras, om kontrollen är en användarkontroll.
- authorizationFilter
- String
Ett godtyckligt strängvärde som tilldelats AuthorizationFilter egenskapen för en WebPart kontroll, som används för att auktorisera om en kontroll kan läggas till på en sida.
- isShared
- Boolean
Anger om kontrollen som kontrolleras för auktorisering är en delad kontroll, vilket innebär att den är synlig för många eller alla användare av programmet och dess IsShared egenskapsvärde är inställt på true.
Returer
Ett booleskt värde som anger om en kontroll har behörighet att läggas till på en sida.
Undantag
type är null.
type är en användarkontroll och path är antingen null eller en tom sträng ("").
-eller-
type är inte en användarkontroll och path har tilldelats ett värde.
Exempel
Följande kodexempel visar hur du åsidosätter IsAuthorized metoden för att avgöra om en kontroll har behörighet att läggas till på en sida.
Det första steget är att skapa ett filter som potentiellt kan exkludera en kontroll. Följande webbsida innehåller tre ASP.NET serverkontroller i ett <asp:webpartzone>-element. Observera att de första och andra kontrollerna har sina AuthorizationFilter egenskaper inställda på olika värden och att den tredje inte tilldelar egenskapen. Det här auktoriseringsvärdet kan kontrolleras vid körning och kontrollen kan läggas till på sidan om filtret matchar villkor som angetts av utvecklaren.
<%@ 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>
Det andra steget är att åsidosätta IsAuthorized(Type, String, String, Boolean) metoden och skapa anpassad hantering för auktoriseringsfilter. Observera att koden först kontrollerar om egenskapen har ett värde, så att alla kontroller som inte tilldelar AuthorizationFilter egenskapen läggs till automatiskt. Om en kontroll har ett filter returnerar true koden endast om filtervärdet är lika med admin. Detta visar en enkel mekanism som du kan använda för att visa vissa kontroller för vissa användare, beroende på deras roll. Även om ett fullständigt exempel med roller ligger utanför omfånget för det här avsnittet kan du använda samma logik som den åsidosättna metoden i det här kodexemplet, förutom att du kan kontrollera om den aktuella användaren är i en roll som matchar värdet för auktoriseringsfilter och sedan lägga till kontrollen endast för den användaren. På så sätt kan du skapa sidor där vissa användare skulle se alla kontroller och andra användare bara skulle se valda kontroller. Så här kan logiken som kontrollerar filtret se ut om du använde roller:
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;
För att kodexemplet ska köras måste du kompilera den här källkoden. Du kan kompilera den explicit och placera den resulterande sammansättningen i webbplatsens bin-mapp eller den globala sammansättningscacheminnet. Du kan också placera källkoden i webbplatsens App_Code mapp, där den kompileras dynamiskt vid körning. I det här kodexemplet används den dynamiska kompileringsmetoden. En genomgång som visar hur du kompilerar finns i Genomgång: Utveckla och använda en anpassad webbserverkontroll.
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
När du har läst in sidan i en webbläsare bör du tänka på att den första kontrollen visas eftersom den matchar kriterierna i den åsidosatta metoden. Den andra kontrollen läggs inte till på sidan eftersom dess filtervärde undantas. Den tredje kontrollen läggs till eftersom den inte har någon egenskapsuppsättning AuthorizationFilter . Om du ändrar egenskapsvärdet för den andra kontrollen så att den matchar den första kontrollens och sedan kör sidan igen läggs även den andra kontrollen till.
Kommentarer
Överlagringsmetoden IsAuthorized(Type, String, String, Boolean) utför de sista stegen för att avgöra om en kontroll har behörighet att läggas till på en sida. Metoden säkerställer att det type är en giltig typ och att den path bara har ett värde om kontrollen som kontrolleras är en användarkontroll. Sedan anropas den kritiska OnAuthorizeWebPart metoden som genererar AuthorizeWebPart händelsen.
Anteckningar till arvingar
Den här metoden kan åsidosättas genom att ärva från WebPartManager klassen om du vill tillhandahålla ytterligare hantering vid kontroll av auktorisering. Du kanske vill åsidosätta metoden för att söka efter vissa värden i parametern authorizationFilter och, baserat på värdet, returnera ett booleskt värde som avgör om kontrollen ska läggas till på en sida.
För sidutvecklare som också vill söka efter auktoriseringsfilter och tillhandahålla anpassad hantering finns det ett alternativ för att göra detta infogat på en .aspx sida, eller i en kod bakom fil, utan att behöva ärva från några klasser. Du kan deklarera en alternativ händelsehanterare på sidan för OnAuthorizeWebPart(WebPartAuthorizationEventArgs) kontrollens WebPartManager metod. Mer information och ett exempel finns i OnAuthorizeWebPart(WebPartAuthorizationEventArgs) metoden.
Se även
- AuthorizationFilter
- AuthorizeWebPart
- OnAuthorizeWebPart(WebPartAuthorizationEventArgs)
- ASP.NET webbdelskontroller