4

我正在尝试尽可能“按书”使用带有 MVC 4 的 Simple Membership Provider。这是当前的情况:

- 我一直在使用 Jon Galloway 的关于该主题的博

1)我知道这个东西是通过实体框架连接的。但是,我确实注意到,当我向 UserProfile 类添加属性时,它们在生成时并没有自动出现在表中。这是由于数据库已经生成(表不存在)吗?我手动添加了这些字段,它可以正常工作,但是很高兴知道会导致字段无法自动创建的“陷阱”。

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

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

4

1 回答 1

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 Migrations 创建或由数据库脚本创建,甚至可以在 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 初始化运行之前创建了特定于应用程序的表。

于 2013-02-05T17:29:34.323 回答