Compartir a través de


Propiedad AuthorizationContext.Instance

Obtiene la instancia del objeto que se va a autorizar.

Espacio de nombres: System.ComponentModel.DataAnnotations
Ensamblado: System.ServiceModel.DomainServices.Server (en system.servicemodel.domainservices.server.dll)

Uso

'Uso
Dim instance As AuthorizationContext
Dim value As Object

value = instance.Instance

Sintaxis

'Declaración
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

Valor de la propiedad

Instancia del objeto que se va a autorizar.

Ejemplo

El ejemplo siguiente muestra una implementación de la clase AuthorizationAttribute que utiliza un valor de AuthorizationContext para personalizar la autenticación.

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.");
        }
    }
}

Notas

Se utiliza la propiedad Instance para recuperar el objeto entidad que está involucrada en la autorización. La propiedad Instance es null cuando no se encuentra disponible ninguna instancia del objeto como, por ejemplo, cuando se autorizan consultas o se valora si se puede intentar realizar una operación. Si crea una clase que se derive de la clase AuthorizationAttribute, compruebe si la propiedad Instance es null cuando implemente el proceso de autorización personalizado.

Seguridad para subprocesos

Cualquier miembro estático público (Compartidos en Visual Basic) de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Plataformas

Plataformas de desarrollo

Microsoft Windows XP Home Edition, Windows XP Professional, Windows Server 2003 , Windows Server 2008 y Windows 2000

Plataformas de destino

Change History

Vea también

Referencia

Clase AuthorizationContext
Miembros AuthorizationContext
Espacio de nombres System.ComponentModel.DataAnnotations