我正在使用Umbraco 5.1 beta。在互联网上(这些信息来自以前的版本,找不到最近的文档)我发现我可以问一个节点用户是否有Access。这样我想建立我的菜单。问题是,我无法使其工作,HasAccess和IsProtected属性不起作用。我究竟做错了什么?或者在较新版本的Umbraco中它的工作方式有何不同? (我也试过它作为方法,仍然没有结果)
这是我现在使用的代码:
@inherits RenderViewPage
@using Umbraco.Cms.Web;
@{
var Homepage = @DynamicModel;
while (Homepage.ContentType.Alias != "homePage")
{
Homepage = Homepage.Parent;
}
}
<ul>
<li><a href="@Homepage.Url">Home</a></li>
@foreach (var item in Homepage.Children) {
if(!item.IsProtected || (item.IsProtected && item.HasAccess)) {
if(@item.CurrentTemplate != null) {
var childName = item.Name ?? "(No name yet)";
<li><a href="@item.Url">@childName </a></li>
}
}
}
</ul>
答案 0 :(得分:4)
如果您只想抑制用户无法访问的节点。然后你可以使用WhereCanAccess()方法。
示例:(这将隐藏用户无权访问的所有子节点)
@inherits RenderViewPage
@using Umbraco.Cms.Web;
@{
var Homepage = @DynamicModel;
while (Homepage.ContentType.Alias != "homePage")
{
Homepage = Homepage.Parent;
}
}
<ul>
<li><a href="@Homepage.Url">Home</a></li>
@foreach (var item in Homepage.Children.WhereCanAccess())
{
if(@item.CurrentTemplate != null)
{
var childName = item.Name ?? "(No name yet)";
<li><a href="@item.Url">@childName </a></li>
}
}
</ul>
试图找出一个节点IsProtected似乎有点复杂(虽然只有几行代码。我找到的唯一方法就是找到它!)
示例:(这只是在受保护菜单项的名称旁边放置一个*)
@inherits RenderViewPage
@using Umbraco.Cms.Web;
@{
var Homepage = @DynamicModel;
while (Homepage.ContentType.Alias != "homePage")
{
Homepage = Homepage.Parent;
}
var appContext = DependencyResolver.Current.GetService<IUmbracoApplicationContext>();
}
<ul>
<li><a href="@Homepage.Url">Home</a></li>
@foreach (var item in Homepage.Children)
{
var isProtected = appContext.Security.PublicAccess.IsProtected(item.Id);
if (@item.CurrentTemplate != null)
{
var childName = item.Name ?? "(No name yet)";
childName = (isProtected) ? "* " + childName : childName;
<li><a href="@item.Url">@childName </a></li>
}
}
</ul>