Partager via


Classe AuthorizationContext

Décrit le contexte dans lequel une autorisation est exécutée.

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

Utilisation

'Utilisation
Dim instance As AuthorizationContext

Syntaxe

'Déclaration
Public NotInheritable Class AuthorizationContext
    Implements IServiceProvider, IDisposable
public sealed class AuthorizationContext : IServiceProvider, IDisposable
public ref class AuthorizationContext sealed : IServiceProvider, IDisposable
public final class AuthorizationContext implements IServiceProvider, IDisposable
public final class AuthorizationContext implements IServiceProvider, IDisposable

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

Cette classe contient des informations qui décrivent l'instance et l'opération qui est autorisée. Elle implémente IDisposable et doit être correctement supprimée après utilisation. Elle prend en charge IServiceProvider afin que le code de validation personnalisé puisse acquérir des services supplémentaires pour l'aider à exécuter sa validation.

Un conteneur des propriétés Items est disponible pour les informations contextuelles supplémentaires sur l'autorisation. Les valeurs stockées dans Items seront accessibles aux méthodes d'autorisation qui utilisent ce AuthorizationContext.

Cette classe fournit également une implémentation d'IServiceContainer pour permettre aux développeurs d'ajouter des services au contexte au moment de l'exécution. Ce conteneur peut être obtenu en appelant la méthode GetService et en fournissant le type d' IServiceContainer ou en utilisant la propriété ServiceContainer.

Le type de l'objet dans la propriété Instance est le type de l'entité impliqué dans l'opération. Pour les opérations de requête, la propriété Instance est Null.

Hiérarchie d'héritage

System.Object
  System.ComponentModel.DataAnnotations.AuthorizationContext

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

Membres AuthorizationContext
Espace de noms System.ComponentModel.DataAnnotations