CodeAccessPermission.IsSubsetOf(IPermission) Metoda

Definice

Při implementaci odvozené třídy určuje, zda aktuální oprávnění je podmnožinou zadaného oprávnění.

public:
 abstract bool IsSubsetOf(System::Security::IPermission ^ target);
public abstract bool IsSubsetOf (System.Security.IPermission target);
abstract member IsSubsetOf : System.Security.IPermission -> bool
Public MustOverride Function IsSubsetOf (target As IPermission) As Boolean

Parametry

target
IPermission

Oprávnění, které se má testovat pro vztah podmnožina Toto oprávnění musí být stejného typu jako aktuální oprávnění.

Návraty

Boolean

true pokud je aktuální oprávnění podmnožinou zadaného oprávnění; falsev opačném případě .

Implementuje

Výjimky

Parametr target není null a není stejného typu jako aktuální oprávnění.

Příklady

Následující příklad kódu ukazuje přepsání IsSubsetOf metody. Tento příklad kódu je součástí většího příkladu poskytnutého CodeAccessPermission pro třídu.

public:
   virtual bool IsSubsetOf( IPermission^ target ) override
   {
#if ( debug ) 
      Console::WriteLine( "************* Entering IsSubsetOf *********************" );
#endif

      if ( target == nullptr )
      {
         Console::WriteLine( "IsSubsetOf: target == null" );
         return false;
      }

#if ( debug ) 
      Console::WriteLine( "This is = {0}", ((NameIdPermission)this).Name );
      Console::WriteLine( "Target is {0}", ((NameIdPermission)target).m_Name );
#endif

      try
      {
         NameIdPermission^ operand = dynamic_cast<NameIdPermission^>(target);
         
         // The following check for unrestricted permission is only included as an example for
         // permissions that allow the unrestricted state. It is of no value for this permission.
         if ( true == operand->m_Unrestricted )
         {
            return true;
         }
         else if ( true == this->m_Unrestricted )
         {
            return false;
         }

         if ( this->m_Name != nullptr )
         {
            if ( operand->m_Name == nullptr )
            {
               return false;
            }
            if ( this->m_Name->Equals( "" ) )
            {
               return true;
            }
         }

         if ( this->m_Name->Equals( operand->m_Name ) )
         {
            return true;
         }
         else
         {
            // Check for wild card character '*'.
            int i = operand->m_Name->LastIndexOf( "*" );

            if ( i > 0 )
            {
               String^ prefix = operand->m_Name->Substring( 0, i );
               if ( this->m_Name->StartsWith( prefix ) )
               {
                  return true;
               }
            }
         }
         return false;
      }
      catch ( InvalidCastException^ ) 
      {
         throw gcnew ArgumentException( String::Format( "Argument_WrongType", this->GetType()->FullName ) );
      }
   }
        public override bool IsSubsetOf(IPermission target)
        {
#if(debug)
            Console.WriteLine ("************* Entering IsSubsetOf *********************");
#endif
            if (target == null)
            {
                Console.WriteLine ("IsSubsetOf: target == null");
                return false;
            }
#if(debug)

            Console.WriteLine ("This is = " + (( NameIdPermission)this).Name);
            Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name);
#endif
            try
            {
                 NameIdPermission operand = ( NameIdPermission)target;

                // The following check for unrestricted permission is only included as an example for
                // permissions that allow the unrestricted state. It is of no value for this permission.
                if (true == operand.m_Unrestricted)
                {
                    return true;
                }
                else if (true == this.m_Unrestricted)
                {
                    return false;
                }

                if (this.m_Name != null)
                {
                    if (operand.m_Name == null) return false;

                    if (this.m_Name == "") return true;
                }

                if (this.m_Name.Equals (operand.m_Name))
                {
                    return true;
                }
                else
                {
                    // Check for wild card character '*'.
                    int i = operand.m_Name.LastIndexOf ("*");

                    if (i > 0)
                    {
                        string prefix = operand.m_Name.Substring (0, i);

                        if (this.m_Name.StartsWith (prefix))
                        {
                            return true;
                        }
                    }
                }

                return false;
            }
            catch (InvalidCastException)
            {
                throw new ArgumentException (String.Format ("Argument_WrongType", this.GetType ().FullName));
            }
        }
        Public Overrides Function IsSubsetOf(ByVal target As IPermission) As Boolean

#If (Debug) Then

            Console.WriteLine("************* Entering IsSubsetOf *********************")
#End If
            If target Is Nothing Then
                Console.WriteLine("IsSubsetOf: target == null")
                Return False
            End If
#If (Debug) Then
            Console.WriteLine(("This is = " + CType(Me, NameIdPermission).Name))
            Console.WriteLine(("Target is " + CType(target, NameIdPermission).m_name))
#End If
            Try
                Dim operand As NameIdPermission = CType(target, NameIdPermission)

                ' The following check for unrestricted permission is only included as an example for
                ' permissions that allow the unrestricted state. It is of no value for this permission.
                If True = operand.m_Unrestricted Then
                    Return True
                ElseIf True = Me.m_Unrestricted Then
                    Return False
                End If

                If Not (Me.m_name Is Nothing) Then
                    If operand.m_name Is Nothing Then
                        Return False
                    End If
                    If Me.m_name = "" Then
                        Return True
                    End If
                End If
                If Me.m_name.Equals(operand.m_name) Then
                    Return True
                Else
                    ' Check for wild card character '*'.
                    Dim i As Integer = operand.m_name.LastIndexOf("*")

                    If i > 0 Then
                        Dim prefix As String = operand.m_name.Substring(0, i)

                        If Me.m_name.StartsWith(prefix) Then
                            Return True
                        End If
                    End If
                End If

                Return False
            Catch
                Throw New ArgumentException(String.Format("Argument_WrongType", Me.GetType().FullName))
            End Try
        End Function

Poznámky

Aktuální oprávnění je podmnožinou zadaného oprávnění, pokud aktuální oprávnění určuje sadu operací, které jsou zcela obsaženy zadaným oprávněním. Například oprávnění představující přístup k C:\example.txt je podmnožinou oprávnění, která představuje přístup k C:\. Pokud tato metoda vrátí true, aktuální oprávnění nepředstavuje více přístupu k chráněnému prostředku, než je zadané oprávnění.

Následující příkazy musí být true určené pro všechny přepsání IsSubsetOf metody. X, Y a Z představují objekty oprávnění vlastního přístupu kódu, které nejsou odkazy null, U představuje neomezené oprávnění přístupu kódu a N představuje prázdné oprávnění s hodnotou PermissionState None.

  • X. Funkce IsSubsetOf(X) vrátí truehodnotu .

  • X. Funkce IsSubsetOf(Y) vrátí stejnou hodnotu jako Y. IsSubsetOf(X) pokud a pouze v případě , že X a Y představují stejnou sadu oprávnění.

  • Pokud X. IsSubsetOf(Y) a Y. IsSubsetOf(Z) oba návrat true, X. Funkce IsSubsetOf(Z) vrátí truehodnotu .

  • X. Funkce IsSubsetOf(U) vrátí truehodnotu .

  • X. Funkce IsSubsetOf(N) vrátí falsehodnotu .

  • N. Funkce IsSubsetOf(X) vrátí truehodnotu .

Pokud X a Y představují objekty oprávnění vlastního přístupu kódu, které jsou odkazy null, X. IsSubsetOf(Y) vrátí truehodnotu . Pokud je hodnota Z také null, operace složené sady X. Union(Y). IsSubsetOf(Z) také vrátí true , protože sjednocení dvou oprávnění null je null oprávnění.

Poznámky pro implementátory

Tuto metodu je nutné přepsat v odvozené třídě.

Platí pro