Share via


CodeAccessPermission.IsSubsetOf(IPermission) Méthode

Définition

Lors de l'implémentation par une classe dérivée, détermine si l'autorisation en cours est un sous-ensemble de l'autorisation spécifiée.

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

Paramètres

target
IPermission

Autorisation qui doit être testée pour la relation de sous-ensemble. Cette autorisation doit être du même type que l’autorisation actuelle.

Retours

true si l’autorisation actuelle est un sous-ensemble de l’autorisation spécifiée ; sinon, false.

Implémente

Exceptions

Le paramètre target n’a pas la valeur null et n’est pas du même type que l’autorisation actuelle.

Exemples

L’exemple de code suivant montre un remplacement de la IsSubsetOf méthode. Cet exemple de code fait partie d’un exemple plus grand fourni pour la CodeAccessPermission classe .

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

Remarques

L’autorisation actuelle est un sous-ensemble de l’autorisation spécifiée si l’autorisation actuelle spécifie un ensemble d’opérations qui est entièrement contenu par l’autorisation spécifiée. Par exemple, une autorisation qui représente l’accès à C:\example.txt est un sous-ensemble d’une autorisation qui représente l’accès à C :\. Si cette méthode retourne true, l’autorisation actuelle ne représente pas plus d’accès à la ressource protégée que l’autorisation spécifiée.

Les instructions suivantes doivent être true pour tous les remplacements de la IsSubsetOf méthode. X, Y et Z représentent des objets d’autorisation d’accès au code personnalisé qui ne sont pas des références null, U représente une autorisation d’accès au code sans restriction et N représente une autorisation vide avec un PermissionState de None.

  • X. IsSubsetOf(X) retourne true.

  • X. IsSubsetOf(Y) retourne la même valeur que Y. IsSubsetOf(X) si et uniquement si X et Y représentent le même ensemble d’autorisations.

  • Si X. IsSubsetOf(Y) et Y. IsSubsetOf(Z) retourne truetous deux , X. IsSubsetOf(Z) retourne true.

  • X. IsSubsetOf(U) retourne true.

  • X. IsSubsetOf(N) retourne false.

  • N. IsSubsetOf(X) retourne true.

Si X et Y représentent des objets d’autorisation d’accès de code personnalisé qui sont des références null, X. IsSubsetOf(Y) retourne true. Si Z est également null, l’opération de jeu composé X. Union(Y). IsSubsetOf(Z) retourne true également, car l’union de deux autorisations null est une autorisation null.

Notes pour les responsables de l’implémentation

Vous devez remplacer cette méthode dans une classe dérivée.

S’applique à