【问题标题】:Sitecore + Glass: Render link, but ignore permissionsSitecore + Glass:呈现链接,但忽略权限
【发布时间】:2015-09-11 13:37:26
【问题描述】:

我有以下几点:

<a href="@Model.Link.Url">

其中的链接是一个玻璃链接属性:

        public virtual Link Link { get; set; }

问题在于目标页面仅限登录用户访问。似乎 glass/sitecore 足够聪明,可以实现这一点,并且不会呈现 Url。相反,它呈现当前 url,而不是“currenturl/edit”。

这样做的问题是,当未经身份验证的用户单击链接时,我希望它把他们带到登录页面,一旦登录,它会将他们重定向到他们最初想要的受限页面。但是因为没有呈现正确的 url,所以这个过程没有被调用。

无论权限如何,我如何让它呈现 URL?

【问题讨论】:

    标签: asp.net-mvc sitecore glass-mapper sitecore8


    【解决方案1】:

    是的,Sitecore 默认会这样做。前段时间我实际上遇到了同样的情况: https://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?PostID=62876

    我记得我最终覆盖了 SitecoreFieldLinkMapper 并更改了这个:

    if (linkField.TargetItem == null) link.Url = string.Empty;
    else link.Url = LinkManager.GetItemUrl(linkField.TargetItem, urlOptions);
    

    到这里:

    Item targetItem = null;
    using (new SecurityDisabler())
    {
        targetItem = linkField.TargetItem;
    }
    
    if (targetItem == null) link.Url = string.Empty;
    else link.Url = LinkManager.GetItemUrl(targetItem, urlOptions);
    

    那时我“很幸运”,架构师将 Glass 的全部资源都包含在了解决方案中。所以我只需要改变原来的映射器。但是如果我必须再做一次,我会扩展原始映射器并在启动时注册它。你可以在这里找到一个例子:http://glass.lu/Mapper/Sc/Tutorials/Tutorial19

    【讨论】:

    • 谢谢。我想根本问题是如果当前用户没有对该项目的权限,那么 sitecore 的 GetItem 方法会返回 null,这对我来说是愚蠢的——安全异常会更好。这让我在另一个问题上绊倒了。 GetItemUrl 根据权限返回一个 不同 的 url 似乎也很愚蠢; 不同的 url有什么好处?当用户请求页面时,Sitecore 将拒绝访问 - 链接管理器应该只提供正确的链接,以便可以调用登录过程。总之,吐槽吧。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多