Umbraco 5询问用户是否有访问节点的权限
我正在使用Umbraco 5.1测试版。在internet上,此信息来自以前的版本,无法在其上找到最近的文档。我发现我可以询问节点用户是否有访问权限。这样,我想建立我的菜单。问题是,我无法让它工作,HasAccess和IsProtected属性无法工作。我做错了什么?或者在较新版本的Umbraco中,它的工作方式是否有所不同?我也试过这个方法,还是没有结果 这是我现在使用的代码:Umbraco 5询问用户是否有访问节点的权限,umbraco,Umbraco,我正在使用Umbraco 5.1测试版。在internet上,此信息来自以前的版本,无法在其上找到最近的文档。我发现我可以询问节点用户是否有访问权限。这样,我想建立我的菜单。问题是,我无法让它工作,HasAccess和IsProtected属性无法工作。我做错了什么?或者在较新版本的Umbraco中,它的工作方式是否有所不同?我也试过这个方法,还是没有结果 这是我现在使用的代码: @inherits RenderViewPage @using Umbraco.Cms.Web; @{
@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>
如果您只是想抑制用户无法访问的节点。然后可以使用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>
虽然只有几行代码,但尝试查找节点是否受保护似乎有点复杂。无论如何,这是我找到的唯一办法
示例:这只是在受保护菜单项的名称旁边放一个*而已
@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>
如果您只是想抑制用户无法访问的节点。然后可以使用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>
虽然只有几行代码,但尝试查找节点是否受保护似乎有点复杂。无论如何,这是我找到的唯一办法
示例:这只是在受保护菜单项的名称旁边放一个*而已
@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>
谢谢你的帮助。这很有效。现在我只需要弄清楚如何构建登录小部件。我尝试从默认解决方案中的loginformtemplate创建宏,但它不起作用。您可能有什么建议吗?我知道这个问题明确要求使用Umbraco 5,但如果您想在Umbraco 7中使用它,请使用,谢谢您的帮助。这很有效。现在我只需要弄清楚如何构建登录小部件。我尝试从默认解决方案中的loginformtemplate创建宏,但它不起作用。您可能有什么建议吗?我知道这个问题明确要求使用Umbraco 5,但如果您想在Umbraco 7中使用它,请使用