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 odvozenou třídou určuje, zda je aktuální oprávnění 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é má být testováno pro vztah podmnožinu. 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í; v opačném případě . false
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 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á je zcela obsažena v zadaném oprávnění. Například oprávnění, které představuje 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ž zadané oprávnění.
Následující příkazy musí být true
pro všechna přepsání IsSubsetOf metody .
X, Y a Z představují vlastní objekty oprávnění pro přístup kódu, které nejsou odkazy s hodnotou null, U představuje neomezené přístupové oprávnění kódu a N představuje prázdné oprávnění s PermissionState hodnotou None.
X. IsSubsetOf(X) vrátí
true
.X. Funkce IsSubsetOf(Y) vrátí stejnou hodnotu jako Y. IsSubsetOf(X), pouze pokud X a Y představují stejnou sadu oprávnění.
Pokud X. IsSubsetOf(Y) a Y. IsSubsetOf(Z) oba vrací
true
, X. IsSubsetOf(Z) vrátítrue
.X. IsSubsetOf(U) vrátí
true
.X. IsSubsetOf(N) vrátí
false
.N. IsSubsetOf(X) vrátí
true
.
Pokud X a Y představují vlastní objekty oprávnění pro přístup kódu, které jsou null odkazy, X. IsSubsetOf(Y) vrátí true
. Pokud je 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ě.