繁体   English   中英

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

[英]ASP.NET (MVC) Users, Roles and Users in Roles

在过去的两天里,我进行了一场小型战斗,尽管我已经解决了它,但它并没有达到我的预期。

Visual Studio 2013上的ASP.NET 4.5。
如果您创建一个新项目并首次启动它并注册,那么一切都很好。

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

它还创建其他表(包括-但不限于)-AspNetRoles-存储角色-AspNetUserRoles-将用户存储在角色中

因此,我首先使用数据库为所有3个表创建模型和控制器,以便可以从一个界面进行管理(我知道VS2010曾经内置了一些东西,但是它似乎已经消失了,因为我学会了如何做DB不用担心第一)

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

[Authorize(Roles="admin")]
public string test() 
{
  return "hello";
}  

一切开始变得梨形。

所以我测试了User.IsInRole(“ admin”),令我沮丧的是它返回了false!

所以我走了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),并使用它来添加存储过程等

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

在此处输入图片说明

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

所以我的下一步是先删除我用数据库创建的表,然后将其重做为aspnet_表...

不开心,但是会成功。 对我的情况有什么想法吗?

我做对了吗?

您的项目中混有Legacy SQL Membership ProviderNew ASP.Net Identity

您只需要一个成员身份即New ASP.Net Identity

在ASP.Net Identity中,不需要在web.config中配置任何设置(对于owin除外AppStartup)

解决方法

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM