CodeAccessPermission.IsSubsetOf(IPermission) Methode

Definition

Bestimmt bei der Implementierung durch eine abgeleitete Klasse, ob die aktuelle Berechtigung eine Teilmenge der angegebenen Berechtigung ist.

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

Parameter

target
IPermission

Eine Berechtigung, die auf die Teilmengenbeziehung geprüft werden soll. Diese Berechtigung muss denselben Typ aufweisen wie die aktuelle Berechtigung.

Gibt zurück

Boolean

true, wenn die aktuelle Berechtigung eine Teilmenge der angegebenen Berechtigung ist, andernfalls false.

Implementiert

Ausnahmen

Der target-Parameter ist nicht null und weist nicht denselben Typ wie die aktuelle Berechtigung auf.

Beispiele

Das folgende Codebeispiel zeigt eine Außerkraftsetzung der IsSubsetOf Methode. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die CodeAccessPermission Klasse bereitgestellt wird.

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

Hinweise

Die aktuelle Berechtigung ist eine Teilmenge der angegebenen Berechtigung, wenn die aktuelle Berechtigung einen Satz von Vorgängen angibt, die vollständig von der angegebenen Berechtigung enthalten sind. Beispielsweise ist eine Berechtigung, die den Zugriff auf C:\example.txt darstellt, eine Teilmenge einer Berechtigung, die den Zugriff auf C:\darstellt. Wenn diese Methode zurückgibt true, stellt die aktuelle Berechtigung keinen mehr Zugriff auf die geschützte Ressource dar als die angegebene Berechtigung.

Die folgenden Anweisungen sind für alle Außerkraftsetzungen der IsSubsetOf Methode erforderlichtrue. X, Y und Z stellen benutzerdefinierte Codezugriffsberechtigungsobjekte dar, die keine NULL-Verweise sind, U stellt eine uneingeschränkte Codezugriffsberechtigung dar, und N stellt eine leere Berechtigung mit einer PermissionState von None.

  • X. IsSubsetOf(X) gibt zurück true.

  • X. IsSubsetOf(Y) gibt denselben Wert wie Y zurück. IsSubsetOf(X) wenn und nur, wenn X und Y denselben Satz von Berechtigungen darstellen.

  • Wenn X. IsSubsetOf(Y) und Y. IsSubsetOf(Z) gibt beide zurück true, X. IsSubsetOf(Z) gibt zurück true.

  • X. IsSubsetOf(U) gibt zurück true.

  • X. IsSubsetOf(N) gibt zurück false.

  • N. IsSubsetOf(X) gibt zurück true.

Wenn X und Y benutzerdefinierte Codezugriffsberechtigungsobjekte darstellen, die NULL-Verweise sind, X. IsSubsetOf(Y) gibt zurück true. Wenn Z auch null ist, wird der zusammengesetzte Satzvorgang X verwendet. Union(Y). IsSubsetOf(Z) gibt auch zurück true , da die Union von zwei Nullberechtigungen eine NULL-Berechtigung ist.

Hinweise für Ausführende

Sie müssen diese Methode in einer abgeleiteten Klasse außer Kraft setzen.

Gilt für