登录用户角色:Asp.net MVC5

时间:2014-05-19 11:00:27

标签: c# asp.net asp.net-identity

我怀疑。我在VS2013中使用Asp.net mvc5。当用户登录时,可以使用

标识登录用户的用户名
    User.Identity.GetUserId

但我无法在视图页面中识别用户的角色。

我尝试了以下内容:

    @{
        var store = new Microsoft.AspNet.Identity.EntityFramework.UserStore<RaspberryPi.Models.ApplicationUser>(new RaspberryPi.Models.ApplicationDbContext());
        var manager = new Microsoft.AspNet.Identity.UserManager<RaspberryPi.Models.ApplicationUser>(store);
        var l = manager.IsInRole(User.Identity.GetUserId, "Moderator");
    }

但导致错误。

    CS1928: 'Microsoft.AspNet.Identity.UserManager<RaspberryPi.Models.ApplicationUser>' does not contain a definition for 'IsInRole' and the best extension method overload 'Microsoft.AspNet.Identity.UserManagerExtensions.IsInRole<TUser>(Microsoft.AspNet.Identity.UserManager<TUser>, string, string)' has some invalid arguments

我该怎么做?

请帮忙, 感谢

2 个答案:

答案 0 :(得分:1)

您的ApplicationUser是否派生自IdentityUser?

public class ApplicationUser : IdentityUser

这应该适用于cshtml

@{
    var context = new RaspberryPi.Models.ApplicationDbContext();          
    if (context.Users.Any(u => u.UserName == User.Identity.Name))
    {
        var store = new Microsoft.AspNet.Identity.EntityFramework.UserStore<applicationuser>();
        var manager = new Microsoft.AspNet.Identity.UserManager<applicationuser>(store);
        ApplicationUser user = manager.FindByName<applicationuser>(User.Identity.Name);
        if (manager.IsInRole(user.Id, "Moderator") == true)
        {
        // Do whatever you want...
        }
    }

或者,如果您想以简单的方式做到这一点。

@if (User.IsInRole("Moderator")){
}

答案 1 :(得分:1)

该异常非常自我解释,您提供的参数不会与IsInRole扩展方法相关联。

问题(假设您的代码完全正如您所示)是GetUserId函数,而不是属性,因此您需要实际叫它

manager.IsInRole(User.Identity.GetUserId(), "Moderator");