Aracılığıyla paylaş


CodeAccessPermission.IsSubsetOf(IPermission) Yöntem

Tanım

Türetilmiş bir sınıf tarafından uygulandığında, geçerli iznin belirtilen iznin bir alt kümesi olup olmadığını belirler.

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

Parametreler

target
IPermission

Alt küme ilişkisi için test edilecek bir izin. Bu izin geçerli izinle aynı türde olmalıdır.

Döndürülenler

true geçerli izin belirtilen iznin bir alt kümesiyse; aksi takdirde , false.

Uygulamalar

Özel durumlar

target parametresi değil null ve geçerli izinle aynı türde değil.

Örnekler

Aşağıdaki kod örneği, yönteminin geçersiz kılmasını IsSubsetOf gösterir. Bu kod örneği, sınıfı için CodeAccessPermission sağlanan daha büyük bir örneğin parçasıdır.

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

Açıklamalar

Geçerli izin, belirtilen izin tarafından tamamen kapsanan bir işlem kümesi belirtiyorsa, geçerli izin belirtilen iznin bir alt kümesidir. Örneğin, C:\example.txt erişimini temsil eden izin, C:\ erişimi temsil eden bir iznin alt kümesidir. Bu yöntem döndürürse true, geçerli izin belirtilen izinden daha fazla korumalı kaynağa erişimi temsil etmez.

Yöntemin tüm geçersiz kılmaları için aşağıdaki deyimlerin IsSubsetOf olması true gerekir. X, Y ve Z , null başvuru olmayan özel kod erişim izni nesnelerini temsil eder, U kısıtlanmamış bir kod erişim iznini, N ise ile PermissionStateNoneboş bir izni temsil eder.

  • X. IsSubsetOf(X) döndürür true.

  • X. IsSubsetOf(Y), Y ile aynı değeri döndürür. IsSubsetOf(X) if ve only if X and Y aynı izin kümesini temsil eder.

  • Eğer X ise. IsSubsetOf(Y) ve Y. IsSubsetOf(Z) her ikisi de , X döndürürtrue. IsSubsetOf(Z) döndürürtrue.

  • X. IsSubsetOf(U) döndürür true.

  • X. IsSubsetOf(N) döndürür false.

  • N. IsSubsetOf(X) döndürür true.

X ve Y, null başvurular olan özel kod erişim izni nesnelerini temsil ediyorsa, X. IsSubsetOf(Y) döndürürtrue. Z de null ise, bileşik küme işlemi X. Union(Y). IsSubsetOf(Z), iki null iznin birleşimi null izin olduğundan da döndürürtrue.

Uygulayanlara Notlar

Türetilmiş bir sınıfta bu yöntemi geçersiz kılmanız gerekir.

Şunlara uygulanır