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);