我们刚刚花了两个小时完成了上述目标。最困难的部分是允许匿名用户在前端查看菜单小工具,但不能查看或访问新的安全页面内容类型。
我们的解决方案确实有效
- 匿名用户可以查看菜单小部件
- 匿名用户可以在菜单小部件中查看指向页面的内容项链接
- 匿名用户无法在菜单小部件中查看到安全页面的内容项目链接
- 匿名用户可以在主菜单中查看任何内容的自定义链接
- 如果匿名用户直接导航到安全页面,则会提示他们进行身份验证
- 这一切都很好
我们想知道的是,"有更好的方法吗?"one_answers"需要在菜单小部件的内容类型和小部件实例级别设置权限是怎么回事?"
首先,我们创建了一个新的安全页面内容类型。然后我们设置以下权限。
用户>角色(查看和访问权限)
Anonymous Authenticated
View page by others y y n y
View own page y y n y
View projection by others y y n y
View own projection y y n y
View secure page by others n n n y
View own secure page n n n y
View all content n n y y
View own content n n n y
View content types n n n n
Access site front end y y y y
我们撤销了匿名角色的View all/own内容,然后明确地重新授予该角色对页面和投影的View权限;我们没有重新授予安全页面的查看权限。此外,我们保留了已验证角色的默认设置,因为默认设置包括查看所有/自己的内容,包括我们创建的新安全页面内容类型。
此时的问题是,撤销匿名角色的View all/own内容意味着该角色无法在前端看到菜单小工具。为了解决这个问题,我们在菜单小部件中添加了内容权限部分,并调整了设置。
内容定义>菜单小部件>零件内容权限
Anonymous Authenticated
View any content n y y n
View own content n n y n
奇怪的是,这还不够。在内容项级别,我们还必须设置以下权限:
小工具>特定菜单小工具>启用内容项访问控制
Disable this (i.e. unchecked it)
Otherwise it overrides what we already set.
在这一点上,解决方案非常有效。
两个问题:为什么我们需要在ContentType级别和Widget实例级别设置Menu Widget的权限。此外,是否有更合适的方式来实现我们的最终目标?
为什么我们需要在ContentType级别和Widget实例级别设置Menu Widget的权限?
因为每个模块都提供自己的一组权限(在这种情况下,例如Orchard.Widgets模块)。
此外,是否有更合适的方式来实现我们的最终目标?
我会选择一个自定义部分,您可以在其中选择可以访问内容的用户角色。我有一个类似的任务,在这里进行有效性检查。