Asp.net mvc Sitecore&x2B;玻璃:渲染链接,但忽略权限

Asp.net mvc Sitecore&x2B;玻璃:渲染链接,但忽略权限,asp.net-mvc,sitecore,glass-mapper,sitecore8,Asp.net Mvc,Sitecore,Glass Mapper,Sitecore8,我有以下资料: <a href="@Model.Link.Url"> 问题是目标页面仅限制登录用户的访问。glass/sitecore似乎足够聪明,能够实现这一点,并且不会呈现Url。而是呈现当前url,而不是“currenturl/edit” 问题是,当未经身份验证的用户单击链接时,我希望它将他们带到登录页面,一旦登录,就会将他们重定向到他们最初想要的受限页面。但由于未呈现正确的url,因此不会调用此过程 如何让它在不考虑权限的情况下呈现Url?是,默认情况下Sitecore会这

我有以下资料:

<a href="@Model.Link.Url">
问题是目标页面仅限制登录用户的访问。glass/sitecore似乎足够聪明,能够实现这一点,并且不会呈现Url。而是呈现当前url,而不是“currenturl/edit”

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


如何让它在不考虑权限的情况下呈现Url?

是,默认情况下Sitecore会这样做。我不久前也遇到过同样的情况:

我记得我最终覆盖了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);

当时我很“幸运”,建筑师将玻璃的全部来源纳入了解决方案中。所以我只需要更改原始的映射器。但如果我必须再次这样做,我会扩展原始映射程序,并在启动时注册它。你可以在这里找到一个例子:

谢谢。我想根本问题是,如果当前用户没有对该项的权限,sitecore的GetItem方法将返回null,这对我来说是愚蠢的-安全异常会更好。这使我在另一个问题上绊倒了。GetItemUrl根据权限返回与请求的url不同的url似乎也很愚蠢;不同的url有什么好处?由于Sitecore会在用户请求页面时拒绝访问,因此链接管理器应该只提供正确的链接,以便可以调用登录过程。不管怎样,结束吧。
Item targetItem = null;
using (new SecurityDisabler())
{
    targetItem = linkField.TargetItem;
}

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