Partager via


Propriété AuthorizationContext.Instance

Obtient l'instance de l'objet qui est autorisée.

Espace de noms: System.ComponentModel.DataAnnotations
Assembly : System.ServiceModel.DomainServices.Server (dans system.servicemodel.domainservices.server.dll)

Utilisation

'Utilisation
Dim instance As AuthorizationContext
Dim value As Object

value = instance.Instance

Syntaxe

'Déclaration
Public ReadOnly Property Instance As Object
public Object Instance { get; }
public:
property Object^ Instance {
    Object^ get ();
}
/** @property */
public Object get_Instance ()
public function get Instance () : Object

Valeur de propriété

Instance de l'objet qui est autorisée.

Exemple

L'exemple suivant affiche une implémentation du AuthorizationAttribute qui utilise une valeur AuthorizationContext pour personnaliser l'authentification.

Public Class RestrictAccessToAssignedManagers
    Inherits AuthorizationAttribute

    Protected Overrides Function IsAuthorized(ByVal principal As System.Security.Principal.IPrincipal, ByVal authorizationContext As System.ComponentModel.DataAnnotations.AuthorizationContext) As System.ComponentModel.DataAnnotations.AuthorizationResult
        Dim eph As EmployeePayHistory
        Dim selectedEmployee As Employee
        Dim authenticatedUser As Employee

        eph = CType(authorizationContext.Instance, EmployeePayHistory)
            
        Using context As New AdventureWorksEntities()
            selectedEmployee = context.Employees.SingleOrDefault(Function(e) e.EmployeeID = eph.EmployeeID)
            authenticatedUser = context.Employees.SingleOrDefault(Function(e) e.LoginID = principal.Identity.Name)
        End Using

        If (selectedEmployee.ManagerID = authenticatedUser.EmployeeID) Then
            Return AuthorizationResult.Allowed
        Else
            Return New AuthorizationResult("Only the authenticated manager for the employee can add a new record.")
        End If
    End Function
End Class
public class RestrictAccessToAssignedManagers : AuthorizationAttribute
{
    protected override AuthorizationResult IsAuthorized(System.Security.Principal.IPrincipal principal, AuthorizationContext authorizationContext)
    {
        EmployeePayHistory eph = (EmployeePayHistory)authorizationContext.Instance;
        Employee selectedEmployee;
        Employee authenticatedUser;

        using (AdventureWorksEntities context = new AdventureWorksEntities())
        {
            selectedEmployee = context.Employees.SingleOrDefault(e => e.EmployeeID == eph.EmployeeID);
            authenticatedUser = context.Employees.SingleOrDefault(e => e.LoginID == principal.Identity.Name);
        }

        if (selectedEmployee.ManagerID == authenticatedUser.EmployeeID)
        {
            return AuthorizationResult.Allowed;
        }
        else
        {
            return new AuthorizationResult("Only the authenticated manager for the employee can add a new record.");
        }
    }
}

Notes

Vous utilisez la propriété Instance pour extraire l'objet entité impliqué dans l'autorisation. La propriété Instance est Null lorsque aucune instance de l'objet n'est disponible, par exemple pour autoriser des requêtes ou évaluer si une opération peut être tentée. Lorsque vous créez une classe qui dérive de la classe AuthorizationAttribute, vérifie si la propriété Instance est Null lors de l'implémentation de votre processus d'autorisation personnalisé.

Sécurité des threads

Tous les membres publics statiques (Partagés dans Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Plateformes

Plateformes de développement

Windows XP Édition familiale, Windows XP Professionnel, Windows Server 2003 , Windows Server 2008 et Windows 2000

Plateformes cibles

Change History

Voir aussi

Référence

Classe AuthorizationContext
Membres AuthorizationContext
Espace de noms System.ComponentModel.DataAnnotations