Deklarativní zabezpečení použité s rozsahem platnosti třídy a člena
Deklarativní zabezpečení může být provedeno u tříd, členů a vnořených tříd. Tato část popisuje pravidla používaná k vyhodnocení deklarativního zabezpečení při použití na více úrovních stejné třídy.
![]() |
---|
V rozhraní .NET Framework verze 4 byla odebrána podpora modulu runtime pro vynucování následujících žádostí o oprávnění: Deny, RequestMinimum, RequestOptional a RequestRefuse.Tyto požadavky by neměly být použity v kódu, který je založen na rozhraní .NET Framework 4 nebo novějším. Další informace o této a dalších změnách naleznete v tématu Změny zabezpečení v rozhraní .NET Framework 4. |
Třídy, členy a deklarativní zabezpečení
Pokud existuje deklarativní zabezpečení pro stejnou akci zabezpečení, jak na úrovni třídy, tak na úrovni metody, tak bude deklarativní zabezpečení použito podle následující tabulky.
Akce zabezpečení |
Chování rozhraní .NET Framework, verze 2.0 |
Chování rozhraní .NET Framework verze 4 |
---|---|---|
Demand |
Atributy na úrovni metody a atributy na úrovni třídy jsou sjednoceny dohromady do jediné sady oprávnění pro obě úrovně. |
Žádná změna chování. |
Link demand |
Atributy na úrovni metody a atributy na úrovni třídy jsou sjednoceny. |
Žádná změna chování. |
Inheritance demand |
Atributy na úrovni třídy vyžadují specifikované oprávnění za účelem odvození od třídy. Atributy na úrovni metody vyžadují specifikovaná oprávnění za účelem přepsání metody v odvozené třídě. Vzhledem k tomu, že inheritance demand má různý význam pro třídy a metody, deklarace mohou být nezávisle aplikovány na úrovních třídy i metody. |
Žádná změna chování. |
Assert |
Atributy na úrovni metody a atributy na úrovni třídy jsou sjednoceny dohromady do jediné sady oprávnění pro obě úrovně. |
Žádná změna chování. |
Odepřít |
Atributy na úrovni metody a atributy na úrovni třídy jsou sjednoceny dohromady do jediné sady oprávnění pro obě úrovně. |
Zastaralé v rozhraní .NET Framework 4. |
Permit only |
Průnik atributů na úrovni metody a atributů na úrovni třídy vytváří jedinou sadu oprávnění pro obě úrovně. |
Žádná změna chování. |
Pokud jsou akce zabezpečení odlišné (například požadavek na úrovni třídy s vyhodnocením na úrovni metody), neexistuje naprosto žádná interakce a obě jsou vyhodnoceny.
Vnořené třídy a deklarativní zabezpečení
Pokud aplikujete deklarativní zabezpečení na třídy, tak to se nešíří na žádné vnořené třídy nebo metody vnořené třídy. Naopak, pokud aplikujete deklarativní zabezpečení na vnořené třídy nebo metody vnořené třídy, tak se také toto deklarativní zabezpečení nešíří na rodičovské třídy. Měli byste aplikovat deklarativní zabezpečení na vnořené třídy, jako kdyby byly samostatnými třídami.
Následující příklad ukazuje hypotetické oprávnění vyžadované na úrovni třídy ve třídě nazvané Main. V rámci této třídy je definována vnořená třída nazvaná Nested. V tomto příkladě se požadavek nevztahuje na vnořenou třídu.
<SomePermissionAttribute(SecurityAction.Demand, Unrestricted:=True)> _
Public Class Main
' This nested class is not influenced by the demand.
Public Class Nested
' This method is not influenced by the demand.
Public Sub MyMethod()
End Sub
End Class
End Class
[SomePermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
class Main
{
// This nested class is not influenced by the demand.
class Nested
{
// This method is not influenced by the demand.
public void MyMethod()
{
}
}
}