Sitecore + Glass:渲染链接,但忽略权限

Dav*_*ers 3 asp.net-mvc sitecore glass-mapper sitecore8

我有以下几点:

<a href="@Model.Link.Url">
Run Code Online (Sandbox Code Playgroud)

其中链接是玻璃链接属性:

        public virtual Link Link { get; set; }
Run Code Online (Sandbox Code Playgroud)

问题在于目标页面仅将访问权限限制为登录用户。Glass / sitecore似乎足够聪明,可以意识到这一点,并且不会渲染网址。而是呈现当前的URL,而不是“ currenturl / edit”。

问题在于,当未经身份验证的用户单击链接时,我希望它将其带到登录页面,一旦登录,它将把他们重定向到他们最初想要的受限页面。但是,由于未呈现正确的url,因此不会调用此过程。

无论权限如何,如何获取它以呈现Url?

Rva*_*len 5

是的,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);
Run Code Online (Sandbox Code Playgroud)

对此:

Item targetItem = null;
using (new SecurityDisabler())
{
    targetItem = linkField.TargetItem;
}

if (targetItem == null) link.Url = string.Empty;
else link.Url = LinkManager.GetItemUrl(targetItem, urlOptions);
Run Code Online (Sandbox Code Playgroud)

现在,我很“幸运”的是,架构师已将Glass的全部资源都包含在解决方案中。因此,我只需要更改原始的映射器。但是,如果必须再次执行此操作,则可以扩展原始映射器并在启动时进行注册。您可以在这里找到一个示例:http : //glass.lu/Mapper/Sc/Tutorials/Tutorial19

  • 谢谢。我想根本的问题是,如果当前用户没有对该项目的权限,sitecore的GetItem方法将返回null,这对我来说是愚蠢的-安全性例外会更好。这使我绊倒了另一个问题。GetItemUrl返回一个*与目标权限不同的URL似乎是愚蠢的。*不同的网址有什么用?当用户请求页面时,Sitecore会拒绝访问-链接管理器应只提供正确的链接,以便可以调用登录过程。无论如何,大声疾呼。 (3认同)