我有一个现有的社区后端,我喜欢使用 Umbraco 作为我的表示层。如何使用 .Net 表单身份验证实现登录/注销?(我不想使用会员功能)。我有不同类型的用户可以访问不同类型的页面。我该如何控制这个?用户控制?
3 回答
Umbraco 使用 ASP.NET 成员/角色提供者模型作为其成员系统,将默认模型替换为您自己的实现是一个非常简单的步骤。我过去曾这样做过,我想针对 Active Directory 存储对成员进行身份验证,但我无法想象针对自定义数据库进行身份验证会变得更加困难。
这样做的好处是您可以与 Umbraco 会员系统完全集成,并且通过使用自定义角色提供程序,编辑将能够使用内置的页面编辑工具来限制页面,而不是您必须使用自己的安全控制.
您应该能够通过扩展UmbracoMembershipProvider类并覆盖ValidateUser方法来创建一个简单的成员资格提供程序。我自己没有做过,但我知道其他人做过。
要针对自定义角色提供者进行身份验证,您需要创建一个派生自RoleProvider的类。您将有兴趣覆盖的方法是 - IsUserInRole、FindUsersInRole、GetAllRoles和GetRolesForUser。
这是 Scott Guthrie博客文章的链接,其中包含的有关提供程序 API 的信息比您需要知道的更多,包括默认提供程序的源代码。
我在我的 umbraco 网站上使用了两种方法。这两种方法都包括用于登录和注销的用户控件,它们分别负责使用自定义解决方案对用户进行身份验证和清除凭据。对于这两种方法,我还为我想要保护的任何文档类型添加了一个 umbracoMembersOnly 属性。
在第一种方法中,我检查了每个单独的模板以查看用户是否被限制访问。为了抽象这一点,我创建了一个带有 isMember 或 isLoggedIn 方法的 siteuser 类,该方法在站点范围内可用,并且可以从 XSLT 或用户控制宏中调用。这种方法的好处是我可以在每个模板上定制自定义消息,而不仅仅是提供相同的拒绝访问页面。
第二种方法——这是我现在喜欢的方法——如果创建一个 Permissions 宏来负责检查用户访问任何页面的权限(即检查 umbracoMembersOnly 属性,如果为真,则检查会话变量)。该宏包含在主模板中,因此在每个模板上执行。如果用户没有访问当前页面的权限,我会重定向到同一页面,但会在查询字符串中附加 ?alttemplate=RestrictedPage 或类似内容。(确保您的 Permissions 宏检查查询字符串中的 alttemplate=RestrictedPage,否则您将陷入无限循环的重定向。)