我们只花了两个小时就完成了上述目标。困难的部分是允许匿名用户在前端查看菜单小部件,但不能查看或访问新的安全页面内容类型。
我们的解决方案确实有效。
- 匿名用户可以查看Menu Widget。
- 匿名用户可以在菜单小部件中查看到页面的内容项链接。
- 匿名用户无法在菜单小部件中查看指向安全页面的内容项链接。
- 匿名用户可以查看主菜单中任何内容的自定义链接。
- 如果匿名用户直接导航到安全页面,则会提示他们进行身份验证。
- 这一切都很好。
我们想知道的是,“有没有更好的方法?” 和“需要在内容类型级别和菜单小部件的小部件实例级别设置权限是怎么回事?”
首先,我们创建了一个新的安全页面内容类型。然后我们设置以下权限。
用户 > 角色(查看和访问权限)
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
我们撤销了匿名角色的查看所有/拥有的内容,然后明确地重新授予该角色对页面和投影的查看权限;我们没有重新授予安全页面的查看权限。此外,我们保留了已验证角色的默认设置,因为默认设置包括查看所有/拥有的内容,包括我们创建的新安全页面内容类型。
此时的问题是,撤销匿名角色的查看所有/自己的内容意味着该角色无法在前端看到菜单小部件。为了解决这个问题,我们将 Content Permission 部分添加到 Menu Widget 并调整了设置。
内容定义 > 菜单小部件 > 部件内容权限
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.
此时,该解决方案完美运行。
两个问题:为什么我们需要在 Content Type 级别和 Widget 实例级别设置 Menu Widget 的权限。此外,有没有更合适的方式来实现我们的最终目标?