Bagikan melalui


CodeAccessPermission.IsSubsetOf(IPermission) Metode

Definisi

Saat diimplementasikan oleh kelas turunan, menentukan apakah izin saat ini adalah subset dari izin yang ditentukan.

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

Izin yang akan diuji untuk hubungan subset. Izin ini harus bertipe sama dengan izin saat ini.

Mengembalikan

true jika izin saat ini adalah subset dari izin yang ditentukan; jika tidak, false.

Penerapan

Pengecualian

Parameter target bukan null dan bukan tipe yang sama dengan izin saat ini.

Contoh

Contoh kode berikut menunjukkan penimpaan IsSubsetOf metode . Contoh kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk CodeAccessPermission kelas .

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

Keterangan

Izin saat ini adalah subset dari izin yang ditentukan jika izin saat ini menentukan sekumpulan operasi yang sepenuhnya terkandung oleh izin yang ditentukan. Misalnya, izin yang mewakili akses ke C:\example.txt adalah subset izin yang mewakili akses ke C:\. Jika metode ini mengembalikan true, izin saat ini tidak mewakili akses lagi ke sumber daya yang dilindungi daripada izin yang ditentukan.

Pernyataan berikut diperlukan untuk true semua penimpaan IsSubsetOf metode. X, Y, dan Z mewakili objek izin akses kode kustom yang bukan referensi null, U mewakili izin akses kode yang tidak dibatasi, dan N mewakili izin kosong dengan PermissionState dari None.

  • X. IsSubsetOf(X) mengembalikan true.

  • X. IsSubsetOf(Y) mengembalikan nilai yang sama dengan Y. IsSubsetOf(X) jika dan hanya jika X dan Y mewakili set izin yang sama.

  • Jika X. IsSubsetOf(Y) dan Y. IsSubsetOf(Z) keduanya mengembalikan true, X. IsSubsetOf(Z) mengembalikan true.

  • X. IsSubsetOf(U) mengembalikan true.

  • X. IsSubsetOf(N) mengembalikan false.

  • N. IsSubsetOf(X) mengembalikan true.

Jika X dan Y mewakili objek izin akses kode kustom yang merupakan referensi null, X. IsSubsetOf(Y) mengembalikan true. Jika Z juga null, operasi set senyawa X. Union(Y). IsSubsetOf(Z) juga mengembalikan true karena persatuan dua izin null adalah izin null.

Catatan Bagi Implementer

Anda harus mengambil alih metode ini di kelas turunan.

Berlaku untuk