CodeAccessPermission.IsSubsetOf(IPermission) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Při implementaci odvozené třídy určuje, zda aktuální oprávnění je podmnožinou zadaného oprávnění.
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
Parametry
- target
- IPermission
Oprávnění, které se má testovat pro vztah podmnožina Toto oprávnění musí být stejného typu jako aktuální oprávnění.
Návraty
true
pokud je aktuální oprávnění podmnožinou zadaného oprávnění; false
v opačném případě .
Implementuje
Výjimky
Parametr target
není null
a není stejného typu jako aktuální oprávnění.
Příklady
Následující příklad kódu ukazuje přepsání IsSubsetOf metody. Tento příklad kódu je součástí většího příkladu poskytnutého CodeAccessPermission pro třídu.
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
Poznámky
Aktuální oprávnění je podmnožinou zadaného oprávnění, pokud aktuální oprávnění určuje sadu operací, které jsou zcela obsaženy zadaným oprávněním. Například oprávnění představující přístup k C:\example.txt je podmnožinou oprávnění, která představuje přístup k C:\. Pokud tato metoda vrátí true
, aktuální oprávnění nepředstavuje více přístupu k chráněnému prostředku, než je zadané oprávnění.
Následující příkazy musí být true
určené pro všechny přepsání IsSubsetOf metody. X, Y a Z představují objekty oprávnění vlastního přístupu kódu, které nejsou odkazy null, U představuje neomezené oprávnění přístupu kódu a N představuje prázdné oprávnění s hodnotou PermissionState None.
X. Funkce IsSubsetOf(X) vrátí
true
hodnotu .X. Funkce IsSubsetOf(Y) vrátí stejnou hodnotu jako Y. IsSubsetOf(X) pokud a pouze v případě , že X a Y představují stejnou sadu oprávnění.
Pokud X. IsSubsetOf(Y) a Y. IsSubsetOf(Z) oba návrat
true
, X. Funkce IsSubsetOf(Z) vrátítrue
hodnotu .X. Funkce IsSubsetOf(U) vrátí
true
hodnotu .X. Funkce IsSubsetOf(N) vrátí
false
hodnotu .N. Funkce IsSubsetOf(X) vrátí
true
hodnotu .
Pokud X a Y představují objekty oprávnění vlastního přístupu kódu, které jsou odkazy null, X. IsSubsetOf(Y) vrátí true
hodnotu . Pokud je hodnota Z také null, operace složené sady X. Union(Y). IsSubsetOf(Z) také vrátí true
, protože sjednocení dvou oprávnění null je null oprávnění.
Poznámky pro implementátory
Tuto metodu je nutné přepsat v odvozené třídě.