ClientRoleProvider.GetRolesForUser(String) メソッド

定義

指定したユーザーが属するロール名を取得します。Gets the names of the roles that the specified user belongs to.

public:
 override cli::array <System::String ^> ^ GetRolesForUser(System::String ^ username);
public override string[] GetRolesForUser (string username);
override this.GetRolesForUser : string -> string[]
Public Overrides Function GetRolesForUser (username As String) As String()

パラメーター

username
String

ロールを取得するユーザーの名前。The name of the user to retrieve roles for.

戻り値

String[]

username が属するロール名。ユーザーが認証されない場合は空の配列。The role names that username belongs to or an empty array if the user is not authenticated.

例外

usernameEmpty または null です。username is Empty or null.

- または --or- username が、現在の認証されたユーザー名ではありません。username is not the user name of the current, authenticated user.

次のコード例では、ロールのメンバーシップをテストする前に、このメソッドを使用して、ユーザーログインの有効期限が切れているかどうかを確認する方法を示します。The following example code demonstrates how to use this method to determine whether the user login has expired before testing role membership. このコードは、すべての有効なユーザーが1つ以上のロールに関連付けられていることを前提としています。This code assumes that all valid users are associated with one or more roles. この場合、メソッドは、 GetRolesForUser ログインの有効期限が切れた以前に認証されたユーザーのロールを返しません。In this case, the GetRolesForUser method will not return any roles for a previously-authenticated user whose login has expired. ユーザーログインの有効期限が切れている場合、このコードでは [ログイン] ダイアログボックスが表示されます。If the user login has expired, this code displays the login dialog box. それ以外の場合は、メソッドを呼び出して、 IsUserInRole ユーザーが "manager" ロールに存在するかどうかを確認します。Otherwise, it calls the IsUserInRole method to determine whether the user is in the "manager" role. 制限されたコードがメソッドに含まれてい PerformManagerTask ますが、これは提供されていません。The restricted code is in a PerformManagerTask method, which is not provided.

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

注釈

メソッドは、現在の認証されて GetRolesForUser いるユーザーのロール情報を取得します。この情報は、パラメーターで指定する必要があり username ます。The GetRolesForUser method retrieves role information for the current, authenticated user, which you must specify in the username parameter. 次のように、プロパティを使用してユーザー名を取得でき static Thread.CurrentPrincipal Thread.CurrentPrincipal.Identity.Name ます。You can get the user name through the static Thread.CurrentPrincipal property as follows: Thread.CurrentPrincipal.Identity.Name.

サービスプロバイダーは、不要なサービス呼び出しを回避するために、ローカルファイルシステムに関するロール情報をキャッシュします。The service provider caches role information about the local file system to avoid unnecessary service calls. 詳細については、クラスの概要に関するトピックを参照してください ClientRoleProviderFor more information, see the ClientRoleProvider class overview.

適用対象

こちらもご覧ください