次の方法で共有


AuthorizationContext クラス

承認が実行されているコンテキストを記述します。

名前空間: System.ComponentModel.DataAnnotations
アセンブリ: System.ServiceModel.DomainServices.Server (system.servicemodel.domainservices.server.dll 内)

使用方法

'使用
Dim instance As AuthorizationContext

構文

'宣言
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

AuthorizationContext 値を使用して承認をカスタマイズする 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.");
        }
    }
}

解説

このクラスには、インスタンスおよび承認中の操作を記述した情報が格納されています。IDisposable を実装し、使用後は適切に破棄する必要があります。カスタム検証コードで追加サービスを取得し、検証に役立てるための IServiceProvider をサポートしています。

承認に関する追加のコンテキスト情報が得られる Items プロパティ バッグが使用できます。Items に格納される値は、この AuthorizationContext を使用する承認方法に対して使用できます。

このクラスはまた、開発者が実行時にコンテキストにサービスを追加できる IServiceContainer の実装も提供します。このコンテナーは GetService メソッドを呼び出して IServiceContainer の型を提供するか、ServiceContainer プロパティを使用して呼び出すことができます。

Instance プロパティのオブジェクトの型は、操作に含まれるエンティティの型になります。クエリ操作の場合、Instance プロパティは null になります。

継承階層

System.Object
  System.ComponentModel.DataAnnotations.AuthorizationContext

スレッド セーフ

この型の public static (Visual Basic では Shared) メンバーは、スレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

プラットフォーム

開発プラットフォーム

Windows XP Home Edition, Windows XP Professional, Windows Server 2003 、Windows Server 2008、および Windows 2000

ターゲット プラットフォーム

Change History

参照

リファレンス

AuthorizationContext のメンバー
System.ComponentModel.DataAnnotations 名前空間