简单的成员资格提供者 - 实体框架和角色

时间:2013-02-05 15:59:53

标签: entity-framework simplemembership

我正在尝试将简单成员资格提供程序与MVC 4一起用作“书中”。这是当前的情况:

- 我一直在使用Jon Galloway关于here主题的博文。

1)我知道这件事是通过Entity Framework连接的。但是,我注意到,当我向UserProfile类添加属性时,它们在生成时不会自动出现在表中。这是由于数据库已经生成(表不存在)?我手动添加了字段并且功能正常,但很高兴知道“陷阱”会导致字段无法自动创建。

2)就角色而言,它似乎主要面向全局权限类型的东西(即用户是用户,管理员等)。如果您想在项目级别处理它(即管理项目1,项目2的用户),需要进行哪些修改?

等)是否有一篇文章真正详细介绍了如何扩展它的最佳实践?

1 个答案:

答案 0 :(得分:5)

1)我发现Simple Membership的UserProfile表部分有点复杂(以一种好的方式),但它对我的应用程序非常有用。

Simple Membership的约定是创建一个名为" UserProfile"的UserProfile表。有两个字段,UserId和UserName。您可以通过修改Filters / InitializeSimpleMembershipAttribute.cs中的WebSecurity.InitializeDatabaseConnection()行来为UserProfile配置不同的表名或不同的UserId和UserName字段名。您可以使用其他字段创建UserProfile表,如果Simple Membership在第一次运行时找到该表,它将由Simple Membership使用。在默认配置下,您的应用程序第一次运行SimpleMembership将创建数据库表,包括在Filters / InitializeSimpleMembershipAttribute.cs中指定的任何UserProfile表详细信息。

因此,诀窍是在第一次调用Simple Membership之前创建所需的UserProfile表(包括该表中所需的所有字段)。这可以由EF迁移创建,也可以由数据库脚本创建,甚至可以在SSMS中手动创建。

如果您想深入了解简单会员代码,请参阅http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/WebSecurity.cshttp://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/SimpleMembershipProvider.cs

2)我同意你关于角色和全局权限的观点。也许你可以使用AddUsersToRoles和RemoveUsersFromRoles(在http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/SimpleRoleProvider.cs中)根据他们使用的项目在登录时修改用户的角色。

等)我不知道有关扩展简单成员资格的好文章,但原则上简单成员资格扩展了扩展成员资格提供程序,扩展了ASP.NET成员资格提供程序。你应该能够在适当的时候跳进去。

编辑回应罗伯特的评论:

作为Entity Framework未创建添加到UserProfile类的列的直接答案,当在创建特定于应用程序的表创建之前,SimpeMembership初始化已创建UserProfile表时,会发生这种情况。原因是SimpleMembership具有UserProfile表的内置定义,可在SimpleMembership创建该表时随时使用。创建UserProfile表的时间非常重要,因此需要确保在SimpleMembership初始化运行之前创建特定于应用程序的表。