过去两天我曾经进行了一场小型战斗,虽然我已经解决了,但这并不像我预期的那样。
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)并用它来添加存储过程等
现在上面的代码可以工作,但除了原始集之外,它还创建了一大堆表。
代码在新的aspnet_roles表中创建角色,它现在在AspNetUsers和aspnet_users中创建我的用户
所以我的下一步行动是先删除我用数据库创建的表,然后重新为aspnet_表重写...
不开心,但会奏效。有关我的情况的任何想法?
我做得对吗?
答案 0 :(得分:1)
您的项目与旧版SQL成员资格提供程序和新ASP.Net标识混合在一起。
您只需要一个 New ASP.Net Identity 的会员资格。
在ASP.Net Identity中,您无需在 web.config 中配置任何设置(除了AppStartup for owin)。
现在你的数据库很乱。由于您的应用程序是新的并且没有现有用户,因此可以轻松地重新创建新的应用程序和新数据库,并重新开始。
然后确保将用户和角色分配给 AspNetUserRoles 表。