实现OnModelCreating MVC5后,IsInRole失败

时间:2014-08-24 21:35:50

标签: asp.net-mvc asp.net-mvc-5

我还有一个IsInRole失败的案例:(我通过创建一个运行.NET Framework 4.5和MVC作为选定模板的MVC 5项目来启动我的应用程序。然后创建了一些用户,分配了角色并添加了以下验证_Layout.cshtml

@if (User.IsInRole("Instructor"))
{
   <li>@Html.ActionLink("Instructors", "Index", "Instructor")</li>
}

一切正常,直到我需要实现OnModelCreating,因为我需要在User表中的用户之间建立一对多的关系。这种变化看起来像这样:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ApplicationUser>()
.HasMany(p => p.RelatedUsers)
.WithMany()
.Map(m =>
{
    m.MapLeftKey("Id");
    m.MapRightKey("RelatedId");
    m.ToTable("users_related");
    modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
    modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); 
}
}

这是问题的开始。 BTW,由于某种原因这样做会将表名更改为Identity [aspnet表的名称],所以由于我没有任何数据,我决定只是从头开始重新创建数据库并调查如何正确以后搭建它。

创建了数据库,种子方法创建了用户,角色和分配的角色,用户运行没有问题,所有内容都插入到表中,但IsInRole刚刚停止工作。

根据我在stackoverflow和其他网站上找到的答案,我已经尝试过,但没有成功,以下内容:

  1. 从浏览器中删除Cookie。
  2. 在web.config中启用角色管理器。为此,我创建了一个指向我的DefaultConnection的sqlProvider并在数据库上运行aspnet_regsql(否则我得到一个错误,表明aspnet_SchemaVersions不存在或者我没有权限)。
  3. 更改Roles.GetRolesForUser的用户.IsInRole(&#34;用户&#34;)。包含(&#34;角色&#34;)和Roles.IsUserInRole()。
  4. 对此没有多少信心,但嘿,谁知道:通过执行以下操作将Identity表重命名为AspNet:modelBuilder.Entity()。ToTable(&#34; AspNetUsers&#34;)到所有身份表on OnModelCreating
  5. 验证用户是否已经过实际身份验证,并重复1,2,3和4。
  6. 我唯一可以让它再次运行的是删除OnModelCreating方法。这完全恢复了IsInRole功能(仅用于记录,Roles.GetRolesForUser(&#34; user&#34;)。包含(&#34;角色&#34;)永远不会返回true,无论是否存在OnModelCreating,Roles.IsUserInRole确实返回true。)

    请帮忙!我上床睡觉,醒来想着这个验证有什么问题。我无法理解角色与实现OnModelCreating之间的关系。

    谢谢,

0 个答案:

没有答案