Classe AuthorizationAttribute
Funge da classe base per le classi utilizzate per controllare l'autorizzazione tramite metadati personalizzati.
Spazio dei nomi: System.ComponentModel.DataAnnotations
Assembly: System.ServiceModel.DomainServices.Server (in system.servicemodel.domainservices.server.dll)
Utilizzo
'Utilizzo
Dim instance As AuthorizationAttribute
Sintassi
'Dichiarazione
Public MustInherit Class AuthorizationAttribute
Inherits Attribute
public abstract class AuthorizationAttribute : Attribute
public ref class AuthorizationAttribute abstract : public Attribute
public abstract class AuthorizationAttribute extends Attribute
public abstract class AuthorizationAttribute extends Attribute
Esempio
Nell'esempio seguente viene illustrata un'implementazione della classe AuthorizationAttribute.
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.");
}
}
}
Osservazioni
Per implementare criteri di autorizzazione personalizzati, creare una classe che deriva dalla classe AuthorizationAttribute. Quando si crea una classe derivata, è necessario implementare la logica di autorizzazione nel metodo IsAuthorized. Il metodo IsAuthorized include i parametri per un oggetto IPrincipal e un oggetto AuthorizationContext. È possibile utilizzare questi parametri per determinare se un utente è autorizzato. Nella classe derivata è possibile aggiungere proprietà specificate nella dichiarazione di attributo e utilizzate nella logica di autorizzazione. Applicare l'attributo alle operazioni che necessitano dei criteri di autorizzazione personalizzati.
Gerarchia di ereditarietà
System.Object
System.Attribute
System.ComponentModel.DataAnnotations.AuthorizationAttribute
System.ServiceModel.DomainServices.Server.RequiresAuthenticationAttribute
System.ServiceModel.DomainServices.Server.RequiresRoleAttribute
Sicurezza dei thread
Tutti i membri statici pubblici (Shared in Visual Basic) di questo tipo sono thread-safe. Non è invece garantita la sicurezza dei membri dell'istanza.
Piattaforme
Piattaforme di sviluppo
Windows XP Home Edition, Windows XP Professional, Windows Server 2003 , Windows Server 2008 e Windows 2000
Piattaforme di destinazione
Change History
Vedere anche
Riferimento
Membri AuthorizationAttribute
Spazio dei nomi System.ComponentModel.DataAnnotations