0

私のコードには、アクションメソッドに次のものがあります:

        catch (Exception e)
        {
            log(e);
            return Content(ExceptionExtensions.GetFormattedErrorMessage(e));
        }

関数でExceptionExtensions.GetFormattedErrorMessage(e)は、「ゲスト」ロールのユーザーか「管理者」ロールのユーザーかによって、異なるメッセージを返すことができるようにしたいと考えています。その関数でこれを行うことはできますか、それともコントローラーでユーザーが役割を果たしているかどうかを何らかの方法で確認し、その情報を他の関数に渡す必要がありますか?

4

3 に答える 3

1

すぐに使用できる .NET の Roles プロバイダーを使用している場合は、次のメソッドを使用Roles.IsUserInRolesします。

if(Roles.IsUserInRoles(HttpContext.Current.User.Identity.Name, "SomeRoleName"))
{
    // do stuff ...
}

http://msdn.microsoft.com/en-us/library/4z6b5d42.aspx

于 2012-05-24T02:47:37.923 に答える
1

HTTPContext にアクセスする必要がありますが、アクション メソッドを格納するクラスで利用できるとは思いません。これを行う 1 つの方法は、HttpContext を関数自体に渡すか、ユーザーが管理者であるかどうかを確認することです。またはフィールドユーザーにして、それを関数に渡します..

役割を確認するには、次の方法を使用できます。

HttpContext.User.IsInRole("Admin");   //returns bool

メソッドで HttpContext にアクセスできるかどうかも確認してください。

于 2012-05-24T02:49:53.760 に答える
0

ExceptionExtensionsクラスが同じMVC プロジェクトにある場合は、FormatErrorMessageを使用して関数からロール情報にアクセスできます。HttpContext.User.IsInRole()その関数が別のアセンブリにある場合は、アセンブリでの参照が必要になりますSystem.Web

コントローラーからその関数にロール情報を渡すか、関数から取得しますか?

関数が別のアセンブリにある場合は、コントローラーから情報を渡すことをお勧めしますSystem.Web

于 2012-05-24T04:01:46.673 に答える