次の方法で共有


ClientRoleProvider.IsUserInRole(String, String) メソッド

定義

指定したユーザーが指定したロールに含まれているかどうかを示す値を取得します。

public:
 override bool IsUserInRole(System::String ^ username, System::String ^ roleName);
public override bool IsUserInRole (string username, string roleName);
override this.IsUserInRole : string * string -> bool
Public Overrides Function IsUserInRole (username As String, roleName As String) As Boolean

パラメーター

username
String

ユーザーの名前。

roleName
String

ロールの名前。

戻り値

指定したユーザーが指定したロールに含まれている場合に true します。指定したユーザーが認証されていないか、指定したロールに含まれていない場合に false します。

例外

usernameEmpty または nullです。

-又は-

username は、現在の認証済みユーザーのユーザー名ではありません。

ユーザーは認証されなくなりました。

-又は-

ロール サービスは使用できません。

次のコード例は、このメソッドに直接アクセスして、ユーザーが特定のロールに含まれているかどうかを判断する方法を示しています。 このコードでは、まず、ユーザー ログインの有効期限が切れているかどうかをテストします。 GetRolesForUser メソッドを呼び出すには明示的な ClientRoleProvider 参照が必要であるため、IsUserInRole メソッドの呼び出しにも同じ参照が使用されます。 ユーザーが "マネージャー" ロールに含まれている場合、このコードは PerformManagerTask メソッドを呼び出しますが、これは指定されていません。

private void AttemptManagerTask()
{
    System.Security.Principal.IIdentity identity =
        System.Threading.Thread.CurrentPrincipal.Identity;

    // Return if the authentication type is not "ClientForms". 
    // This indicates that the user is logged out.
    if (!identity.AuthenticationType.Equals("ClientForms")) return;

    try
    {
        ClientRoleProvider provider =
            (ClientRoleProvider)System.Web.Security.Roles.Provider;
        String userName = identity.Name;

        // Determine whether the user login has expired by attempting
        // to retrieve roles from the service. Call the ResetCache method
        // to ensure that the roles are retrieved from the service. If no 
        // roles are returned, then the login has expired. This assumes 
        // that every valid user has been assigned to one or more roles.
        provider.ResetCache();
        String[] roles = provider.GetRolesForUser(userName);
        if (roles.Length == 0)
        {
            MessageBox.Show(
                "Your login has expired. Please log in again to access " +
                "the roles service.", "Attempting to access user roles...");

            // Call ValidateUser with empty strings in order to 
            // display the login dialog box configured as a 
            // credentials provider.
            if (!System.Web.Security.Membership.ValidateUser(
                String.Empty, String.Empty))
            {
                MessageBox.Show("Unable to authenticate. " +
                    "Cannot retrieve user roles.", "Not logged in",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }

        if (provider.IsUserInRole(userName, "manager"))
        {
            PerformManagerTask();
        }
    }
    catch (System.Net.WebException)
    {
        MessageBox.Show(
            "Unable to access the remote service. " +
            "Cannot retrieve user roles.", "Warning",
            MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
}
Private Sub AttemptManagerTask()

    Dim identity As System.Security.Principal.IIdentity = _
        System.Threading.Thread.CurrentPrincipal.Identity

    ' Return if the authentication type is not "ClientForms". 
    ' This indicates that the user is logged out.
    If Not identity.AuthenticationType.Equals("ClientForms") Then Return

    Try

        Dim provider As ClientRoleProvider = _
            CType(System.Web.Security.Roles.Provider, ClientRoleProvider)
        Dim userName As String = identity.Name

        ' Determine whether the user login has expired by attempting
        ' to retrieve roles from the service. Call the ResetCache method
        ' to ensure that the roles are retrieved from the service. If no 
        ' roles are returned, then the login has expired. This assumes 
        ' that every valid user has been assigned to one or more roles.
        provider.ResetCache()
        Dim roles As String() = provider.GetRolesForUser(userName)
        If roles.Length = 0 Then

            MessageBox.Show( _
                "Your login has expired. Please log in again to access " & _
                "the roles service.", "Attempting to access user roles...")

            ' Call ValidateUser with empty strings in order to 
            ' display the login dialog box configured as a 
            ' credentials provider.
            If Not System.Web.Security.Membership.ValidateUser( _
                String.Empty, String.Empty) Then

                MessageBox.Show("Unable to authenticate. " & _
                    "Cannot retrieve user roles.", "Not logged in", _
                    MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return

            End If

        End If

        If provider.IsUserInRole(userName, "manager") Then
            PerformManagerTask()
        End If

    Catch ex As System.Net.WebException

        MessageBox.Show( _
            "Unable to access the remote service. " & _
            "Cannot retrieve user roles.", "Warning", _
            MessageBoxButtons.OK, MessageBoxIcon.Warning)

    End Try

End Sub

注釈

認証されたユーザーが特定のロールにあるかどうかを確認するには、staticThread.CurrentPrincipal プロパティによって返される IPrincipalIsInRole メソッドを呼び出します。 クライアント アプリケーション サービスを使用するように構成されたアプリケーションの場合、このプロパティは ClientRolePrincipalを返します。 このクラスは IPrincipal インターフェイスを実装するため、明示的に参照する必要はありません。 ClientRolePrincipal.IsInRole メソッドは、IsUserInRole メソッドを内部的に呼び出します。 IsUserInRole メソッドは、GetRolesForUser メソッドを使用して、username によって示されたユーザーが、roleNameによって示されるロールに含まれているかどうかを判断します。

サービス プロバイダーは、不要なサービス呼び出しを回避するために、ローカル ファイル システムに関するロール情報をキャッシュします。 詳細については、ClientRoleProvider クラスの概要を参照してください。

適用対象

こちらもご覧ください