在Microsoft.AspNet.Identity中使用UserManager和RoleManager;

时间:2014-04-02 15:39:51

标签: c# entity-framework

我以前用过这个,我不能为我生活中的生活找出错误。

@using System.Data.Entity;
@using Microsoft.AspNet.Identity;
@using Microsoft.AspNet.Identity.EntityFramework;


using(ApplicationDbContext db = new ApplicationDbContext())
{
   var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
   var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));

   var user = User.Identity.GetUserId();

        if(user != null)
        {
            string role = "Admin";
            if (!rm.RoleExists(role))
            {
                var roleResult = rm.Create(new IdentityRole(role));
                if (!roleResult.Succeeded) { //error stuff
                };
            }
            if (!um.IsInRole(user, role))
            {
                um.AddToRole(user, role);
            }
        }
}

当我运行这个时,我跳过创建一个角色元素(因为我已经将它添加到数据库中),但是当它到达'是管理员角色的用户'位时,该行      um.AddToRole(用户,角色) 运行,但后来我收到一个错误,说我有违规,因为我试图复制密钥。

我不明白为什么调试时程序说“没有这个名字的用户有管理员的角色”,稍后当它试图添加该角色时,我会看到“嘿,该用户已具有Admin角色,您无法再次添加“

在我使用RoleProviders之前,我必须更改我的web.config并在其中添加信息,但我没有这样做,因为我没有!?

这可能很简单,但我被卡住了。

为了清楚起见,我如何检查当前登录的用户是否属于具有AspNet.Identity的“Admin”角色。

亲切的问候

1 个答案:

答案 0 :(得分:2)

好的,所以问题是关闭转动lazing负载导致这个问题。我将Microsoft身份更新为2.0,但仍然没有乐趣。显然,这是他们正在解决的已知错误。

不太理想,因为我总是把懒人装掉。这不是一个庞大的应用程序,因此性能不是问题。大家都知道。