Požadavky dědičnosti
Požadavky dědičnosti aplikované na třídy mají jiný význam než požadavky dědičnosti aplikované na metody. Můžete umístit požadavky dědičnosti na úrovni třídy a zajistit tak, že pouze kód se specifikovaným oprávněním může dědit z vaší třídy. Požadavky dědičnosti umístěné u metod vyžadují, aby kód měl specifikovaná oprávnění pro přepsání této metody.
Poznámka |
---|
V rozhraní .NET Framework verze 4 byl představen nový model transparentnosti. Model Transparentní kód pro zabezpečení, úroveň 2 identifikuje zabezpečený kód pomocí atributu SecurityCriticalAttribute nebo SecuritySafeCriticalAttribute. Důležitý kód zabezpečení vyžaduje, aby volající i dědicové byli plně důvěryhodní.Každý typ nebo člen, který dědí z členu kritického pro zabezpečení musí být kritický pro zabezpečení nebo bezpečný a kritický pro zabezpečení.Sestavení, která používají starší pravidla zabezpečení přístupu kódu (úroveň 1) mohou volat důležité typy a členy zabezpečení úrovně 2, pokud jsou plně důvěryhodná.Nicméně typy a členy úrovně 2 musí výslovně rozpoznat požadavky dědičnosti, protože úroveň 2 implicitně neaplikuje pravidla dědičnosti na volající úrovně 1. |
Požadavky dědičnosti tříd
Zděděný požadavek aplikovaný na třídu má za následek požadování, aby všechny třídy odvozené od rodičovské třídy měly specifikovaná oprávnění. Například pokud třída B dědí ze třídy A a třída A je chráněna požadavkem dědičnosti, pak třídě B musí být uděleno toto oprávnění, aby běžela. Pokud třídě B je uděleno dané oprávnění a je odvozena ze třídy A, potom třída C musí také mít oprávnění vyžadované třídou A, pokud je odvozena ze třídy B. Tento požadavek může být aplikován pouze deklarativně.
Následující příklad kódu používá požadavek dědičnosti pro vyžadování, aby jakákoliv třída, která dědí z třídy MyClass1 musela mít vlastní oprávnění CustomPermissionAttribute. Toto oprávnění je hypotetické vlastní oprávnění a neexistuje v rozhraní .NET Framework. Požadavek je vytvořen předáním CustomPermissionAttribute a hodnoty výčtu SecurityAction.InheritanceDemand.
<CustomPermissionAttribute(SecurityAction.InheritanceDemand)> _
Public Class MyClass1
Public Sub New()
End Sub
Public Overridable Function ReadData() As String
' Access a custom resource.
End Function
End Class
[CustomPermissionAttribute(SecurityAction.InheritanceDemand)]
public class MyClass
{
public MyClass()
{
}
public virtual string ReadData()
{
// Access a custom resource.
}
}
Požadavky dědičnosti metod
Umístění požadavku dědičnosti u statické metody v základní třídě nemá žádný vliv na odvozenou třídu, protože statické metody jsou nezávislé. Nicméně umístění požadavku dědičnosti u jakékoli ne statické metody v základní třídě má stejný účinek jako požadavek dědičnosti u třídy. Všechny metody v odvozené třídě, včetně konstruktoru třídy musí splnit požadavek dědičnosti.
Viz také
Koncepty
Rozšíření metadat pomocí atributů
Vytvoření vlastního kódu přístupových oprávnění