Export (0) Print
Expand All

UrlIdentityPermission Class

Defines the identity permission for the URL from which the code originates. This class cannot be inherited.

For a list of all members of this type, see UrlIdentityPermission Members.

System.Object
   System.Security.CodeAccessPermission
      System.Security.Permissions.UrlIdentityPermission

[Visual Basic]
<Serializable>
NotInheritable Public Class UrlIdentityPermission
   Inherits CodeAccessPermission
[C#]
[Serializable]
public sealed class UrlIdentityPermission : CodeAccessPermission
[C++]
[Serializable]
public __gc __sealed class UrlIdentityPermission : public
   CodeAccessPermission
[JScript]
public
   Serializable
class UrlIdentityPermission extends CodeAccessPermission

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Remarks

The complete URL is considered, including the protocol (HTTP, HTTPS, FTP) and the file. For example, http://www.fourthcoffee.com/process/grind.htm is a complete URL.

URLs can be matched exactly or by a wildcard in the final position, for example: http://www.fourthcoffee.com/process/*.

CAUTION    UrlIdentityPermission grants permission for all paths to the file, including both the URL and the IP address. To Deny access to the file, you must Deny all possible paths to the file. For example, if http://www.fourthcoffee.com/process/grind.htm is located at IP address 192.168.238.241, to Deny access to http://www.fourthcoffee.com/process/grind.htm, you must Deny http://www.fourthcoffee.com/process/grind.htm, 192.168.238.241/grind.htm and any other path that you can use to access the code. Unfortunately, there are a myriad of ways URL paths can be phrased, so it is extremely difficult to block all paths through the use of Deny alone. A better technique to deal with multiple paths is to use a combination of PermitOnly and Deny. PermitOnly allows you to identify a finite set of URLs that you can provide access to, and then Deny allows you to explicitly select addresses from that set that you want to deny access to. For more information on this subject and the use of PermitOnly with Deny, see Canonicalization Problems Using Deny in the Deny topic.

Example

[Visual Basic] 
' This sample demonstrates the IsSubsetOf, Union, Intersect, Copy, ToXml and FromXml methods 
' of the UrlIdentityPermission class.

Imports System
Imports System.Security
Imports System.Security.Permissions
Imports Microsoft.VisualBasic

<Assembly: CLSCompliant(True)> 

Public Class UrlIdentityPermissionDemo

    ' IsSubsetOf determines whether the current permission is a subset of the specified permission.
    Private Function IsSubsetOfDemo() As Boolean

        Dim returnValue As Boolean = True

        Dim url1, url2 As String
        Dim urlIdPerm1, urlIdPerm2 As UrlIdentityPermission

        Dim urlGen1 As New UrlGenerator()
        Dim urlGen2 As New UrlGenerator()

        urlGen1.ResetIndex()
        While urlGen1.CreateUrl(urlIdPerm1, url1)
            If urlIdPerm1 Is Nothing Then
                GoTo ContinueWhile1
            End If
            urlGen2.ResetIndex()
            Console.WriteLine("********************************************************\n")
            While urlGen2.CreateUrl(urlIdPerm2, url2)
                Dim firstPermission As String = IIf(url1 = "" Or url1 Is Nothing, "null", url1)
                Dim secondPermission As String = IIf(url2 = "" Or url2 Is Nothing, "null", url2)
                If urlIdPerm2 Is Nothing Then
                    GoTo ContinueWhile2
                End If
                Try
                    If urlIdPerm1.IsSubsetOf(urlIdPerm2) Then

                        Console.WriteLine(firstPermission & ControlChars.Lf & " is a subset of " & secondPermission & ControlChars.Lf)
                    Else
                        Console.WriteLine(firstPermission & ControlChars.Lf & " is not a subset of " & secondPermission & ControlChars.Lf)
                    End If

                Catch e As Exception
                    Console.WriteLine(IIf("An exception was thrown for subset :" & url1 = "", "null.", IIf(url1 & ControlChars.Lf & url2 = "", "null.", url2 & ControlChars.Lf & e.ToString())))
                End Try
ContinueWhile2:
            End While
ContinueWhile1:
        End While
        Return returnValue
    End Function 'IsSubsetOfDemo

    ' Union creates a new permission that is the union of the current permission and 
    ' the specified permission.
    Private Function UnionDemo() As Boolean

        Dim returnValue As Boolean = True

        Dim url1, url2 As String
        Dim urlIdPerm1, urlIdPerm2 As UrlIdentityPermission
        Dim urlIdPerm3 As IPermission

        Dim urlGen1 As New UrlGenerator()
        Dim urlGen2 As New UrlGenerator()

        urlGen1.ResetIndex()
        While urlGen1.CreateUrl(urlIdPerm1, url1)
            If urlIdPerm1 Is Nothing Then
                GoTo ContinueWhile1
            End If
            Console.WriteLine("**********************************************************" & ControlChars.Lf)
            urlGen2.ResetIndex()
            While urlGen2.CreateUrl(urlIdPerm2, url2)

                Try
                    If urlIdPerm2 Is Nothing Then
                        GoTo ContinueWhile2
                    End If
                    Dim firstPermission As String = IIf(url1 = "" Or url1 Is Nothing, "null", url1)
                    Dim secondPermission As String = IIf(url2 = "" Or url2 Is Nothing, "null", url2)
                    urlIdPerm3 = CType(urlIdPerm1.Union(urlIdPerm2), UrlIdentityPermission)
                    urlIdPerm3 = urlIdPerm1.Union(urlIdPerm2)

                    If urlIdPerm3 Is Nothing Then
                        Console.WriteLine("The union of " & firstPermission & "  and " & ControlChars.Lf & ControlChars.Tab & secondPermission & " is null.")
                    Else
                        Console.WriteLine("The union of " & firstPermission & "  and " & ControlChars.Lf & ControlChars.Tab & secondPermission & " = " & ControlChars.Lf & ControlChars.Tab & CType(urlIdPerm3, UrlIdentityPermission).Url.ToString())
                    End If
                Catch e As Exception
                    Console.WriteLine("An exception was thrown for union :" & e.ToString())
                    returnValue = False
                End Try
ContinueWhile2:
            End While
ContinueWhile1:
        End While


        Return returnValue
    End Function 'UnionDemo

    ' Intersect creates and returns a new permission that is the intersection of the 
    ' current permission and the permission specified.
    Private Function IntersectDemo() As Boolean

        Dim returnValue As Boolean = True

        Dim url1, url2 As String
        Dim urlIdPerm1, urlIdPerm2, urlIdPerm3 As UrlIdentityPermission

        Dim urlGen1 As New UrlGenerator()
        Dim urlGen2 As New UrlGenerator()

        urlGen1.ResetIndex()
        While urlGen1.CreateUrl(urlIdPerm1, url1)
            If urlIdPerm1 Is Nothing Then
                GoTo ContinueWhile1
            End If
            Console.WriteLine("**********************************************************" & ControlChars.Lf)
            urlGen2.ResetIndex()
            Console.WriteLine("********************************************************\n")
            While urlGen2.CreateUrl(urlIdPerm2, url2)
                If urlIdPerm2 Is Nothing Then
                    GoTo ContinueWhile2
                End If
                Dim firstPermission As String = IIf(url1 = "" Or url1 Is Nothing, "null", url1)
                Dim secondPermission As String = IIf(url2 = "" Or url2 Is Nothing, "null", url2)
                Try

                    urlIdPerm3 = CType(urlIdPerm1.Intersect(urlIdPerm2), UrlIdentityPermission)
                    If Not (urlIdPerm3 Is Nothing) AndAlso Not (urlIdPerm3.Url Is Nothing) Then

                        Console.WriteLine("The intersection of " & firstPermission & "  and " & ControlChars.Lf & ControlChars.Tab & secondPermission & " = " & ControlChars.Lf & ControlChars.Tab & CType(urlIdPerm3, UrlIdentityPermission).Url.ToString())
                    Else
                        Console.WriteLine("The intersection of " & firstPermission & "  and " & ControlChars.Lf & ControlChars.Tab & secondPermission & " is null. ")
                    End If
                Catch e As Exception
                    Console.WriteLine("An exception was thrown for the intersection : " & e.ToString())
                    returnValue = False
                End Try
ContinueWhile2:
            End While
ContinueWhile1:
        End While

        Return returnValue
    End Function 'IntersectDemo

    'Copy creates and returns an identical copy of the current permission.
    Private Function CopyDemo() As Boolean

        Dim returnValue As Boolean = True
        Dim url1 As String
        Dim urlIdPerm1, urlIdPerm2 As UrlIdentityPermission
        Dim urlGen1 As New UrlGenerator()
        Dim urlGen2 As New UrlGenerator()

        urlGen1.ResetIndex()
        While urlGen1.CreateUrl(urlIdPerm1, url1)
            If urlIdPerm1 Is Nothing Then
                GoTo ContinueWhile1
            End If
            urlGen2.ResetIndex()
            Console.WriteLine("********************************************************\n")
            Try
                urlIdPerm2 = CType(urlIdPerm1.Copy(), UrlIdentityPermission)
                If Not (urlIdPerm2 Is Nothing) Then
                    Console.WriteLine("Result of copy = " & urlIdPerm2.ToString() & ControlChars.Lf)
                Else
                    Console.WriteLine("Result of copy is null. " & ControlChars.Lf)
                End If
            Catch e As Exception
                If (True.ToString()) Then
                    If url1 = "" Then
                        Console.WriteLine("The target UrlIdentityPermission is empty; copy failed.")

                    Else
                        Console.WriteLine(e.ToString())
                    End If
                End If
                GoTo ContinueWhile1
            End Try
ContinueWhile1:
        End While
        Return returnValue
    End Function 'CopyDemo

    ' ToXml creates an XML encoding of the permission and its current state; FromXml 
    ' reconstructs a permission with the specified state from the XML encoding. 
    Private Function ToFromXmlDemo() As Boolean

        Dim returnValue As Boolean = True

        Dim url1 As String
        Dim urlIdPerm1, urlIdPerm2 As UrlIdentityPermission

        Dim urlGen1 As New UrlGenerator()
        Dim urlGen2 As New UrlGenerator()

        urlGen1.ResetIndex()
        While urlGen1.CreateUrl(urlIdPerm1, url1)
            If urlIdPerm1 Is Nothing Then
                GoTo ContinueWhile1
            End If
            Console.WriteLine("********************************************************\n")
            urlGen2.ResetIndex()
            Try
                urlIdPerm2 = New UrlIdentityPermission(PermissionState.None)
                urlIdPerm2.FromXml(urlIdPerm1.ToXml())
                Console.WriteLine("Result of ToFromXml = " & urlIdPerm2.ToString())

            Catch e As Exception
                Console.WriteLine("ToFromXml failed :" & urlIdPerm1.ToString() & e.ToString())
                GoTo ContinueWhile1
            End Try
ContinueWhile1:
        End While

        Return returnValue
    End Function 'ToFromXmlDemo

    ' Invoke all demos.
    Public Function runDemo() As Boolean

        Dim ret As Boolean = True
        Dim retTmp As Boolean
        ' Call IsSubsetOf demo.
        retTmp = IsSubsetOfDemo()
        If retTmp Then
            Console.Out.WriteLine("IsSubset demo completed successfully.")
        Else
            Console.Out.WriteLine("IsSubset demo failed.")
        End If
        ret = retTmp AndAlso ret

        ' Call Union demo.
        retTmp = UnionDemo()
        If retTmp Then
            Console.Out.WriteLine("Union demo completed successfully.")
        Else
            Console.Out.WriteLine("Union demo failed.")
        End If
        ret = retTmp AndAlso ret

        ' Call Intersect demo.    
        retTmp = IntersectDemo()
        If retTmp Then
            Console.Out.WriteLine("Intersect demo completed successfully.")
        Else
            Console.Out.WriteLine("Intersect demo failed.")
        End If
        ret = retTmp AndAlso ret


        ' Call Copy demo.    
        retTmp = CopyDemo()
        If retTmp Then
            Console.Out.WriteLine("Copy demo completed successfully.")
        Else
            Console.Out.WriteLine("Copy demo failed.")
        End If
        ret = retTmp AndAlso ret

        ' Call ToFromXml demo.
        retTmp = ToFromXmlDemo()
        If retTmp Then
            Console.Out.WriteLine("ToFromXml demo completed successfully.")
        Else
            Console.Out.WriteLine("ToFromXml demo failed.")
        End If
        ret = retTmp AndAlso ret

        Return ret
    End Function 'runDemo

    ' Test harness.
    Public Overloads Shared Sub Main(ByVal args() As [String])
        Try
            Dim democase As New UrlIdentityPermissionDemo()
            Dim ret As Boolean = democase.runDemo()
            If ret Then
                Console.Out.WriteLine("UrlIdentity demo completed successfully.")
                Console.Out.WriteLine("Press the Enter key to exit.")
                Dim consoleInput As String = Console.ReadLine()
                System.Environment.ExitCode = 100
            Else
                Console.Out.WriteLine("UrlIdentity demo failed.")
                Console.Out.WriteLine("Press the Enter key to exit.")
                Dim consoleInput As String = Console.ReadLine()
                System.Environment.ExitCode = 101
            End If
        Catch e As Exception
            Console.Out.WriteLine("UrlIdentity demo failed.")
            Console.WriteLine(e.ToString())
            Console.Out.WriteLine("Press the Enter key to exit.")
            Dim consoleInput As String = Console.ReadLine()
            System.Environment.ExitCode = 101
        End Try
    End Sub 'Main
End Class 'UrlIdentityPermissionDemo


' This class generates UrlIdentityPermission objects.

Friend Class UrlGenerator


    Private myUrl As String() = {"http://www.fourthcoffee.com/process/grind.htm", "http://www.fourthcoffee.com/process/*", "http://www.fourthcoffee.com/*", "http://www.fourthcoffee.com/process/*", "http://www.contoso.com/math.asmx"}

    Private urlIndex As Integer = 0


    Public Sub New()
        ResetIndex()
    End Sub 'New


    Public Sub ResetIndex()
        urlIndex = 0
    End Sub 'ResetIndex

    ' CreateUrl creates a UrlIdentityPermission.
    Public Function CreateUrl(ByRef urlPerm As UrlIdentityPermission, ByRef url As String) As Boolean


        If urlIndex = myUrl.Length Then
            urlPerm = New UrlIdentityPermission(PermissionState.None)
            url = ""
            urlIndex &= 1
            Return True
        End If
        If urlIndex > myUrl.Length Then
            urlPerm = Nothing
            url = ""
            Return False
        End If

        url = myUrl(urlIndex)
        urlIndex = urlIndex + 1

        Try
            urlPerm = New UrlIdentityPermission(url)
            Return True
        Catch e As Exception
            Console.WriteLine("Cannot create UrlIdentityPermission : " & url & " " & e.ToString())
            urlPerm = New UrlIdentityPermission(PermissionState.None)
            url = ""
            Return True
        End Try
    End Function 'CreateUrl
' End of UrlGenerator.

[C#] 
// This sample demonstrates the IsSubsetOf, Union, Intersect, Copy, ToXml and FromXml methods 
// of the UrlIdentityPermission class.


    using System;
    using System.Security; 
    using System.Security.Permissions; 

    [assembly:CLSCompliant(true)]

    public class UrlIdentityPermissionDemo
    {
// IsSubsetOf determines whether the current permission is a subset of the specified permission.
        private bool IsSubsetOfDemo()
        {

            bool returnValue = true;

            string url1,url2;
            UrlIdentityPermission urlIdPerm1,urlIdPerm2;

            UrlGenerator urlGen1 = new UrlGenerator();
            UrlGenerator urlGen2 = new UrlGenerator();

            urlGen1.ResetIndex();
            while(urlGen1.CreateUrl(out urlIdPerm1, out url1)) 
            {
                if(urlIdPerm1 == null) continue;
                urlGen2.ResetIndex();
                Console.WriteLine("********************************************************\n");
                while(urlGen2.CreateUrl(out urlIdPerm2, out url2)) 
                {
                    string firstPermission = url1 == "" | url1 == null ? "null" : url1 ;
                    string secondPermission = url2 == "" | url2 == null ? "null" : url2;
                    if(urlIdPerm2 == null) continue;
                    try
                    {            
                        if (urlIdPerm1.IsSubsetOf(urlIdPerm2))
                        {
                            
                            Console.WriteLine(firstPermission +"\n is a subset of " 
                                + secondPermission + "\n");
                        }
                        else
                        {
                            Console.WriteLine(firstPermission  +"\n is not a subset of " 
                                + secondPermission + "\n");
                        }

                    }
                    catch(Exception e) 
                    {
                        Console.WriteLine("An exception was thrown for subset :" 
                            + url1 == "" ? "null." : url1 + "\n" + url2 == "" ? "null." : url2 +"\n" + e);
                    }
                }
            }
            return returnValue;
        }
        // Union creates a new permission that is the union of the current permission and 
        // the specified permission.
        private bool UnionDemo()
        {

            bool returnValue = true;

            string url1,url2;
            UrlIdentityPermission urlIdPerm1,urlIdPerm2;
            IPermission urlIdPerm3;

            UrlGenerator urlGen1 = new UrlGenerator();
            UrlGenerator urlGen2 = new UrlGenerator();

            urlGen1.ResetIndex();
            while(urlGen1.CreateUrl(out urlIdPerm1, out url1)) 
            {
                if(urlIdPerm1 == null) continue;
                
                Console.WriteLine("**********************************************************\n");
                urlGen2.ResetIndex();
                    while(urlGen2.CreateUrl(out urlIdPerm2, out url2)) 
                    {

                        try
                        {
                            if(urlIdPerm2 == null) continue;

                            string firstPermission = url1 == "" | url1 == null ? "null" : url1 ;
                            string secondPermission = url2 == "" | url2 == null ? "null" : url2;
                            urlIdPerm3 = (UrlIdentityPermission)urlIdPerm1.Union(urlIdPerm2);
                            urlIdPerm3 = urlIdPerm1.Union(urlIdPerm2);

                            if(urlIdPerm3 == null) 
                            {
                                Console.WriteLine("The union of " + firstPermission 
                                    + "  and \n\t"  + secondPermission + " is null.");
                            }
                            else
                            {
                                Console.WriteLine("The union of " + firstPermission + "  and \n\t"  
                                    + secondPermission + 
                                    " = \n\t" + ((UrlIdentityPermission)urlIdPerm3).Url.ToString());
                            }
                        }
                        catch(Exception e) 
                        {
                            Console.WriteLine("An exception was thrown for union :" + e);
                            returnValue=false;
                        }

                }
                
            }

            return returnValue;

        }
    // Intersect creates and returns a new permission that is the intersection of the 
    // current permission and the permission specified.
        private bool IntersectDemo()
        {

            bool returnValue = true;

            string url1,url2;
            UrlIdentityPermission urlIdPerm1,urlIdPerm2,urlIdPerm3;

            UrlGenerator urlGen1 = new UrlGenerator();
            UrlGenerator urlGen2 = new UrlGenerator();

            urlGen1.ResetIndex();
            while(urlGen1.CreateUrl(out urlIdPerm1, out url1)) 
            {
                if(urlIdPerm1 == null) continue;
                Console.WriteLine("**********************************************************\n");
                urlGen2.ResetIndex();
                Console.WriteLine("********************************************************\n");
                while(urlGen2.CreateUrl(out urlIdPerm2, out url2)) 
                {
                    if(urlIdPerm2 == null) continue;
                    string firstPermission = url1 == "" | url1 == null ? "null" : url1 ;
                    string secondPermission = url2 == "" | url2 == null ? "null" : url2;
                    try
                    {
            
                        urlIdPerm3 = (UrlIdentityPermission)urlIdPerm1.Intersect(urlIdPerm2);
                        if (urlIdPerm3 != null && urlIdPerm3.Url != null)
                        {

                            Console.WriteLine("The intersection of " + firstPermission 
                                + "  and \n\t"  + secondPermission + 
                                " = \n\t" + ((UrlIdentityPermission)urlIdPerm3).Url.ToString());
                        }
                        else
                        {
                            Console.WriteLine("The intersection of " + firstPermission + "  and \n\t"  
                                + secondPermission + " is null. ");
                        }
                    }
                    catch(Exception e) 
                    {
                        Console.WriteLine("An exception was thrown for the intersection : "  + e);
                        returnValue=false;
                    }
                }
            }

            return returnValue;

        }
    //Copy creates and returns an identical copy of the current permission.
        private bool CopyDemo()
        {
    
            bool returnValue = true;
            string url1;
            UrlIdentityPermission urlIdPerm1,urlIdPerm2;
            UrlGenerator urlGen1 = new UrlGenerator();
            UrlGenerator urlGen2 = new UrlGenerator();

            urlGen1.ResetIndex();
            while(urlGen1.CreateUrl(out urlIdPerm1, out url1)) 
            {
                if(urlIdPerm1 == null ) continue;  
                urlGen2.ResetIndex();
                Console.WriteLine("********************************************************\n");
                try
                {            
                    urlIdPerm2 = (UrlIdentityPermission)urlIdPerm1.Copy();
                    if (urlIdPerm2 != null)
                    {
                        Console.WriteLine("Result of copy = " + urlIdPerm2.ToString() + "\n");
                    }
                    else
                    {
                        Console.WriteLine("Result of copy is null. \n");
                    }
                }
                catch(Exception e) 
                {
                    {
                        if (url1 == "")
                        {
                            Console.WriteLine( "The target UrlIdentityPermission is empty; copy failed.");

                        }
                        else
                        Console.WriteLine( e);
                    }
                    continue;
                }
            }
            return returnValue;
        }
    // ToXml creates an XML encoding of the permission and its current state; FromXml 
    // reconstructs a permission with the specified state from the XML encoding. 
        private bool ToFromXmlDemo()
        {

            bool returnValue = true;

            string url1;
            UrlIdentityPermission urlIdPerm1,urlIdPerm2;

            UrlGenerator urlGen1 = new UrlGenerator();
            UrlGenerator urlGen2 = new UrlGenerator();

            urlGen1.ResetIndex();
            while(urlGen1.CreateUrl(out urlIdPerm1, out url1)) 
            {
                if(urlIdPerm1 == null) continue;
                Console.WriteLine("********************************************************\n");
                urlGen2.ResetIndex();
                try
                {            
                    urlIdPerm2= new UrlIdentityPermission(PermissionState.None);
                    urlIdPerm2.FromXml(urlIdPerm1.ToXml());
                    Console.WriteLine("Result of ToFromXml = " +urlIdPerm2.ToString() + "\n");
            
                }
                catch(Exception e) 
                {
                    Console.WriteLine("ToFromXml failed :" + urlIdPerm1.ToString() + e);
                    continue;
                }
            }

            return returnValue;

        }
        // Invoke all demos.
        public bool runDemo()
        {

            bool ret=true;
            bool retTmp;
            // Call IsSubsetOf demo.
            retTmp= IsSubsetOfDemo();
            if(retTmp)    Console.Out.WriteLine("IsSubset demo completed successfully.");
            else Console.Out.WriteLine("IsSubset demo failed.");
            ret=retTmp && ret;
    
            // Call Union demo.
            retTmp= UnionDemo();
            if(retTmp) Console.Out.WriteLine("Union demo completed successfully.");
            else Console.Out.WriteLine("Union demo failed.");
            ret=retTmp && ret;

            // Call Intersect demo.    
            retTmp= IntersectDemo();
            if(retTmp) Console.Out.WriteLine("Intersect demo completed successfully.");
            else Console.Out.WriteLine("Intersect demo failed.");
            ret=retTmp && ret;


            // Call Copy demo.    
            retTmp= CopyDemo();
            if(retTmp) Console.Out.WriteLine("Copy demo completed successfully.");
            else Console.Out.WriteLine("Copy demo failed.");
            ret=retTmp && ret;
        
            // Call ToFromXml demo.
            retTmp= ToFromXmlDemo();
            if(retTmp)Console.Out.WriteLine("ToFromXml demo completed successfully.");
            else Console.Out.WriteLine("ToFromXml demo failed.");
            ret=retTmp && ret;

            return (  ret );    

        }
// Test harness.
        public static void Main(String[] args) 
        {
            try
            {
                UrlIdentityPermissionDemo democase = new UrlIdentityPermissionDemo();
                bool ret = democase.runDemo();
                if (ret)
                {
                    Console.Out.WriteLine("UrlIdentity demo completed successfully.");
                    Console.Out.WriteLine("Press the Enter key to exit.");
                    string consoleInput = Console.ReadLine();
                    System.Environment.ExitCode = 100;
                }
                else
                {
                    Console.Out.WriteLine("UrlIdentity demo failed.");
                    Console.Out.WriteLine("Press the Enter key to exit.");
                    string consoleInput = Console.ReadLine();
                    System.Environment.ExitCode = 101;
                }
            }
            catch(Exception e)
            {
                Console.Out.WriteLine("UrlIdentity demo failed.");
                Console.WriteLine(e.ToString());
                Console.Out.WriteLine("Press the Enter key to exit.");
                string consoleInput = Console.ReadLine();
                System.Environment.ExitCode = 101;
            }
        }
    }


    // This class generates UrlIdentityPermission objects.
 
    internal  class UrlGenerator
    {


        private string[] myUrl = 
    {"http://www.fourthcoffee.com/process/grind.htm","http://www.fourthcoffee.com/process/*",
        "http://www.fourthcoffee.com/*","http://www.fourthcoffee.com/process/*","http://www.contoso.com/math.asmx"};

        private int urlIndex = 0;

        public UrlGenerator()
        {
            ResetIndex();
        }

        public void ResetIndex()
        {
            urlIndex = 0;
        }
        // CreateUrl creates a UrlIdentityPermission.

        public bool CreateUrl(out UrlIdentityPermission urlPerm, out string url)
        {


            if(urlIndex == myUrl.Length) 
            {
                urlPerm = new UrlIdentityPermission(PermissionState.None);
                url="";
                urlIndex++;
                return true;

            }
            if(urlIndex > myUrl.Length)
            {
                urlPerm = null;
                url = "";
                return false;
            }

            url = myUrl[urlIndex++];

            try
            {
                urlPerm = new UrlIdentityPermission(url);
                return true;
            } 
            catch(Exception e)
            {
                Console.WriteLine("Cannot create UrlIdentityPermission : " + url +" "+e);
                urlPerm = new UrlIdentityPermission(PermissionState.None);
                url="";
                return true;
            }
        }
    } // End of UrlGenerator.


[C++] 
// This sample demonstrates the IsSubsetOf, Union, Intersect, Copy, ToXml and FromXml methods
// of the UrlIdentityPermission class.
#using <mscorlib.dll>

using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
using namespace System::Runtime::InteropServices;

[assembly:CLSCompliant(true)];

// This class generates UrlIdentityPermission objects.

private __gc class UrlGenerator {
private:
   String* myUrl[];

private:
   int urlIndex;

public:
   UrlGenerator() {
      String* temp0 [] = {
         S"http://www.fourthcoffee.com/process/grind.htm",
            S"http://www.fourthcoffee.com/process/*",
            S"http://www.fourthcoffee.com/*",
            S"http://www.fourthcoffee.com/process/*",
            S"http://www.contoso.com/math.asmx"
      };
      myUrl = temp0;
      ResetIndex();
   }

public:
   void ResetIndex() {
      urlIndex = 0;
   }
   // CreateUrl creates a UrlIdentityPermission.
public:
   bool CreateUrl([Out] UrlIdentityPermission** urlPerm, [Out] String** url) {
      if (urlIndex == myUrl->Length) {
         *urlPerm = new UrlIdentityPermission(PermissionState::None);
         *url=S"";
         urlIndex++;
         return true;
      }
      if (urlIndex > myUrl->Length) {
         *urlPerm = 0;
         *url = S"";
         return false;
      }

      *url = myUrl[urlIndex++];

      try {
         *urlPerm = new UrlIdentityPermission(*url);
         return true;
      } catch (Exception* e) {
         Console::WriteLine(S"Cannot create UrlIdentityPermission : {0} {1}", *url, e);
         *urlPerm = new UrlIdentityPermission(PermissionState::None);
         *url=S"";
         return false;
      }
   }
}; // End of UrlGenerator.

public __gc class UrlIdentityPermissionDemo {
   // IsSubsetOf determines whether the current permission is a subset of the specified permission.
private:
   bool IsSubsetOfDemo() {

      bool returnValue = true;

      String* url1, *url2;
      UrlIdentityPermission* urlIdPerm1, *urlIdPerm2;

      UrlGenerator* urlGen1 = new UrlGenerator();
      UrlGenerator* urlGen2 = new UrlGenerator();

      urlGen1->ResetIndex();
      while(urlGen1->CreateUrl(&urlIdPerm1, &url1)) {
         if (urlIdPerm1 == 0) continue;
         urlGen2->ResetIndex();
         Console::WriteLine(S"********************************************************\n");
         while(urlGen2->CreateUrl(&urlIdPerm2, &url2)) {
            String* firstPermission = url1->Equals(S"") || url1 == 0 ? S"null" : url1 ;
            String* secondPermission = url2->Equals(S"") || url2 == 0 ? S"null" : url2;
            if (urlIdPerm2 == 0) continue;
            try {
               if (urlIdPerm1->IsSubsetOf(urlIdPerm2)) {

                  Console::WriteLine(S"{0}\n is a subset of {1}\n",
                     firstPermission, secondPermission);
               } else {
                  Console::WriteLine(S"{0}\n is not a subset of {1}\n",
                     firstPermission, secondPermission);
               }
            } catch (Exception* e) {
               Console::WriteLine(S"An exception was thrown for subset : {0}\n{1}\n{2}",
                  url1->Equals(S"") ? S"0." : url1, url2->Equals(S"") ? S"0." : url2, e);
            }
         }
      }
      return returnValue;
   }
   // Union creates a new permission that is the union of the current permission and
   // the specified permission.
private:
   bool UnionDemo() {

      bool returnValue = true;

      String* url1, *url2;
      UrlIdentityPermission* urlIdPerm1, *urlIdPerm2;
      IPermission* urlIdPerm3;

      UrlGenerator* urlGen1 = new UrlGenerator();
      UrlGenerator* urlGen2 = new UrlGenerator();

      urlGen1->ResetIndex();
      while(urlGen1->CreateUrl(&urlIdPerm1, &url1)) {
         if (urlIdPerm1 == 0) continue;

         Console::WriteLine(S"**********************************************************\n");
         urlGen2->ResetIndex();
         while(urlGen2->CreateUrl(&urlIdPerm2, &url2)) {
            try {
               if (urlIdPerm2 == 0) continue;

               String* firstPermission = url1->Equals(S"") || url1 == 0 ? S"null" : url1 ;
               String* secondPermission = url2->Equals(S"") || url2 == 0 ? S"null" : url2;
               urlIdPerm3 = dynamic_cast<UrlIdentityPermission*>(urlIdPerm1->Union(urlIdPerm2));
               urlIdPerm3 = urlIdPerm1->Union(urlIdPerm2);

               if (urlIdPerm3 == 0) {
                  Console::WriteLine(S"The union of {0}  and \n\t{1} is null.",
                     firstPermission,
                     secondPermission);
               } else {
                  Console::WriteLine(S"The union of {0}  and \n\t{1} = \n\t{2}",
                     firstPermission,
                     secondPermission,
                     (dynamic_cast<UrlIdentityPermission*>(urlIdPerm3))->Url);
               }
            } catch (Exception* e) {
               Console::WriteLine(S"An exception was thrown for union : {0}", e);
               returnValue=false;
            }
         }
      }
      return returnValue;
   }
   // Intersect creates and returns a new permission that is the intersection of the
   // current permission and the permission specified.
private:
   bool IntersectDemo() {

      bool returnValue = true;

      String* url1, *url2;
      UrlIdentityPermission* urlIdPerm1, *urlIdPerm2, *urlIdPerm3;

      UrlGenerator* urlGen1 = new UrlGenerator();
      UrlGenerator* urlGen2 = new UrlGenerator();

      urlGen1->ResetIndex();
      while(urlGen1->CreateUrl(&urlIdPerm1, &url1)) {
         if (urlIdPerm1 == 0) continue;
         Console::WriteLine(S"**********************************************************\n");
         urlGen2->ResetIndex();
         Console::WriteLine(S"********************************************************\n");
         while(urlGen2->CreateUrl(&urlIdPerm2, &url2)) {
            if (urlIdPerm2 == 0) continue;
            String* firstPermission = url1->Equals(S"") || url1 == 0 ? S"null" : url1 ;
            String* secondPermission = url2->Equals(S"") || url2 == 0 ? S"null" : url2;
            try {
               urlIdPerm3 = dynamic_cast<UrlIdentityPermission*>(urlIdPerm1->Intersect(urlIdPerm2));
               if (urlIdPerm3 != 0 && urlIdPerm3->Url != 0) {
                  Console::WriteLine(S"The intersection of {0}  and \n\t{1} = \n\t{2}",
                     firstPermission,
                     secondPermission,
                     (dynamic_cast<UrlIdentityPermission*>(urlIdPerm3))->Url);
               } else {
                  Console::WriteLine(S"The intersection of {0}  and \n\t{1} is null. ",
                     firstPermission,
                     secondPermission);
               }
            } catch (Exception* e) {
               Console::WriteLine(S"An exception was thrown for the intersection : {0}", e);
               returnValue=false;
            }
         }
      }
      return returnValue;
   }
   //Copy creates and returns an identical copy of the current permission.
private:
   bool CopyDemo() {

      bool returnValue = true;
      String* url1;
      UrlIdentityPermission* urlIdPerm1, *urlIdPerm2;
      UrlGenerator* urlGen1 = new UrlGenerator();
      UrlGenerator* urlGen2 = new UrlGenerator();

      urlGen1->ResetIndex();
      while(urlGen1->CreateUrl(&urlIdPerm1, &url1)) {
         if (urlIdPerm1 == 0) continue;
         urlGen2->ResetIndex();
         Console::WriteLine(S"********************************************************\n");
         try {
            urlIdPerm2 = dynamic_cast<UrlIdentityPermission*>(urlIdPerm1->Copy());
            if (urlIdPerm2 != 0) {
               Console::WriteLine(S"Result of copy = {0}\n", urlIdPerm2);
            } else {
               Console::WriteLine(S"Result of copy is null. \n");
            }
         } catch (Exception* e) { {
            if (url1->Equals(S"")) {
               Console::WriteLine(S"The target UrlIdentityPermission is empty; copy failed.");
            } else
               Console::WriteLine(e);
         }
         continue;
         }
      }
      return returnValue;
   }
   // ToXml creates an XML encoding of the permission and its current state; FromXml
   // reconstructs a permission with the specified state from the XML encoding.
private:
   bool ToFromXmlDemo() {

      bool returnValue = true;

      String* url1;
      UrlIdentityPermission* urlIdPerm1, *urlIdPerm2;

      UrlGenerator* urlGen1 = new UrlGenerator();
      UrlGenerator* urlGen2 = new UrlGenerator();

      urlGen1->ResetIndex();
      while(urlGen1->CreateUrl(&urlIdPerm1, &url1)) {
         if (urlIdPerm1 == 0) continue;
         Console::WriteLine(S"********************************************************\n");
         urlGen2->ResetIndex();
         try {
            urlIdPerm2 = new UrlIdentityPermission(PermissionState::None);
            urlIdPerm2->FromXml(urlIdPerm1->ToXml());
            Console::WriteLine(S"Result of ToFromXml = {0}\n", urlIdPerm2);
         } catch (Exception* e) {
            Console::WriteLine(S"ToFromXml failed : {0}{1}", urlIdPerm1, e);
            continue;
         }
      }
      return returnValue;
   }
   // Invoke all demos.
public:
   bool runDemo() {

      bool ret=true;
      bool retTmp;
      // Call IsSubsetOf demo.
      retTmp= IsSubsetOfDemo();
      if (retTmp)
         Console::WriteLine(S"IsSubset demo completed successfully.");
      else 
         Console::WriteLine(S"IsSubset demo failed.");
      ret=retTmp && ret;

      // Call Union demo.
      retTmp= UnionDemo();
      if (retTmp)
         Console::WriteLine(S"Union demo completed successfully.");
      else
         Console::WriteLine(S"Union demo failed.");
      ret=retTmp && ret;

      // Call Intersect demo.
      retTmp= IntersectDemo();
      if (retTmp)
         Console::WriteLine(S"Intersect demo completed successfully.");
      else
         Console::WriteLine(S"Intersect demo failed.");
      ret=retTmp && ret;

      // Call Copy demo.
      retTmp= CopyDemo();
      if (retTmp)
         Console::WriteLine(S"Copy demo completed successfully.");
      else
         Console::WriteLine(S"Copy demo failed.");
      ret=retTmp && ret;

      // Call ToFromXml demo.
      retTmp= ToFromXmlDemo();
      if (retTmp)
         Console::WriteLine(S"ToFromXml demo completed successfully.");
      else
         Console::WriteLine(S"ToFromXml demo failed.");
      ret=retTmp && ret;

      return (ret);
   }
};

// Test harness.
int main() {
   try {
      UrlIdentityPermissionDemo* democase = new UrlIdentityPermissionDemo();
      bool ret = democase->runDemo();
      if (ret) {
         Console::WriteLine(S"UrlIdentity demo completed successfully.");
         Console::WriteLine(S"Press the Enter key to exit.");
         Console::ReadLine();
         System::Environment::ExitCode = 100;
      } else {
         Console::WriteLine(S"UrlIdentity demo failed.");
         Console::WriteLine(S"Press the Enter key to exit.");
         Console::ReadLine();
         System::Environment::ExitCode = 101;
      }
   } catch (Exception* e) {
      Console::WriteLine(S"UrlIdentity demo failed.");
      Console::WriteLine(e);
      Console::WriteLine(S"Press the Enter key to exit.");
      Console::ReadLine();
      System::Environment::ExitCode = 101;
   }
}

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Namespace: System.Security.Permissions

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

Assembly: Mscorlib (in Mscorlib.dll)

See Also

UrlIdentityPermission Members | System.Security.Permissions Namespace | Permissions | Requesting Permissions | UrlIdentityPermissionAttribute | Url | UrlMembershipCondition

Show:
© 2014 Microsoft