角色中的ASP.NET(MVC)用户,角色和用户

时间:2014-12-24 11:20:11

标签: c# asp.net asp.net-mvc asp.net-membership

过去两天我曾经进行了一场小型战斗,虽然我已经解决了,但这并不像我预期的那样。

Visual Studio 2013上的ASP.NET 4.5 如果你创建了一个新项目并且第一次启动它并注册,一切都很好。

它会创建一个名为AspNetUsers的表,并将您放入该表中。

它还会创建其他表格(包括但不限于此) - AspNetRoles - 存储角色 - AspNetUserRoles - 以角色存储用户

所以我首先使用Database为所有3个表创建模型和控制器,这样我就可以从一个界面管理它们了(我知道曾经有一些内置于VS2010但它似乎已经消失了 - 不用担心我学会了首先做数据库)

问题是当我将用户添加到角色时,数据显示在我的数据库中,但是当我尝试使用装饰器锁定控制器方法时:

[Authorize(Roles="admin")]
public string test() 
{
  return "hello";
}  
一切都开始变成梨形了。

所以我测试了User.IsInRole(" admin"),令我失望的是它返回了假!

所以我走了web.config之旅(这告诉角色经理指向我的DefaultConnection(我用于所有东西)

<roleManager enabled="true" defaultProvider="SqlRoleManager">
  <providers>
    <add name="SqlRoleManager"
         type="System.Web.Security.SqlRoleProvider"
         connectionStringName="DefaultConnection"
         applicationName="ConferenceOrg" />
  </providers>
</roleManager>

然后在我使用的代码中:

string role = "admin";

if (!Roles.RoleExists(role))
{
  Roles.CreateRole(role);  
}
else
{
  string[] usrs = { User.Identity.Name };

  if (!User.IsInRole(role))  
  {
    Roles.AddUsersToRole(usrs, role);
  }
}

最初这没有用,因为存储过程并不存在。 所以,我去了C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ Tools \ Shortcuts并启动了Native Tools Cmd提示符(x86)并用它来添加存储过程等

现在上面的代码可以工作,但除了原始集之外,它还创建了一大堆表。

enter image description here

代码在新的aspnet_roles表中创建角色,它现在在AspNetUsers和aspnet_users中创建我的用户

所以我的下一步行动是先删除我用数据库创建的表,然后重新为aspnet_表重写...

不开心,但会奏效。有关我的情况的任何想法?

我做得对吗?

1 个答案:

答案 0 :(得分:1)

您的项目与旧版SQL成员资格提供程序新ASP.Net标识混合在一起。

您只需要一个 New ASP.Net Identity 的会员资格。

在ASP.Net Identity中,您无需在 web.config 中配置任何设置(除了AppStartup for owin)

如何解决

现在你的数据库很乱。由于您的应用程序是新的并且没有现有用户,因此可以轻松地重新创建新的应用程序和新数据库,并重新开始。

然后确保将用户和角色分配给 AspNetUserRoles 表。