[英]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 Provider和New ASP.Net Identity 。
您只需要一个成员身份即New ASP.Net Identity 。
在ASP.Net Identity中,不需要在web.config中配置任何设置(对于owin除外AppStartup) 。
现在您的数据库一片混乱。 由于您的应用程序是新的并且没有现有用户,因此可以轻松地重新创建新的应用程序和新的数据库,然后重新开始。
然后,确保用户和角色都分配给AspNetUserRoles表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.