0

我的代码在操作方法中有以下内容:

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

ExceptionExtensions.GetFormattedErrorMessage(e)函数中,我希望能够返回不同的消息,具体取决于它是“Guest”角色还是“Admin”角色的用户。我是否能够在该函数中执行此操作,或者我是否需要以某种方式找出用户在控制器中是否处于角色中,然后将该信息传递给另一个函数?

4

3 回答 3

1

Roles.IsUserInRoles如果您使用 .NET 的开箱即用的角色提供程序,您将使用该方法:

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 并且我认为它在包含您的操作方法的类中不可用,解决此问题的一种方法是将 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 回答