我正在种子方法中创建一些数据。我正在创建一些具有一些权限(角色)的用户
WebSecurity.InitializeDatabaseConnection("MibContext", "UserProfile", "UserId", "UserName", autoCreateTables: true);
Roles.CreateRole(Constants.Roles.Administrator);
Roles.CreateRole(Constants.Roles.ContentManager);
Roles.CreateRole(Constants.Roles.KeyAccountManager);
然后我有用户名的变量(以避免任何拼写错误的可能性)
var adminusername = "admin@domain.com";
var userusername = "user@domain.com";
我通过 EF 和 UnitOfWork 模式创建 Userprofile 记录
var admin = new UserProfile
{
FirstName = "Admin",
LastName = "Account",
UserName = adminusername
};
unitOfWork.UserRepository.Insert(admin);
unitOfWork.Save();
然后创建用户 Membership 帐户,并分配角色:
WebSecurity.CreateAccount(adminusername, "123456");
WebSecurity.CreateAccount(userusername, "123456");
Roles.AddUserToRole(userusername, Constants.Roles.Administrator);
Roles.AddUserToRole(userusername, Constants.Roles.KeyAccountManager);
最后一个角色命令导致错误,UsersInRoles 和 UserProfile 之间的外键冲突。这很奇怪,因为它可以将角色映射到第一个用户(第一次是管理员用户,但想看看它是否可以为该用户创建权限,确实如此)
然后我删除了外键约束以查看发生了什么,并将 3 放在那里。通过重复但添加第四个角色进行测试,似乎(用户名,角色)参数是错误的!?!?新角色的 Id=4,在重复测试时,这就是它放在 UserId 列中的内容。
RoleId UserId
2 1
2 4
NULL NULL
角色配置:
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<providers>
<clear/>
<add name="SimpleRoleProvider"
type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
</providers>
</roleManager>
我错过了什么吗?