Sdílet prostřednictvím


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.

Důležitá poznámkaDůležité

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()
        {   
        }
    }
}

Viz také

Koncepty

Požadavky zabezpečení

Zabezpečení přístupu kódu