CodeAccessPermission.IsSubsetOf(IPermission) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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ür
true
. 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.