CodeAccessPermission.IsSubsetOf(IPermission) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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) mengembalikantrue
.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.