gpt4 book ai didi

razor - Umbraco 7 隐藏导航节点用户无权访问

转载 作者:行者123 更新时间:2023-12-01 07:56:30 25 4
gpt4 key购买 nike

我在以前的 Umbraco 版本(即 5)中看到了一些示例,其中这似乎相对简单。见 this stackoverflow question例如。

理论是我可以使用一个属性 HasAccessIsProtected在节点上,或方法 WhereHasAccess在选择要使用的节点时。

我到目前为止的代码是:

var nodes = @CurrentPage.AncestorsOrSelf(1).First().Children;

这让我得到了页面列表,没问题。但是,我正在努力过滤页面列表,以便登录用户只能看到他们有权访问的内容,而公共(public)访问者看不到 protected 页面。

V5 代码表明这是可能的:
var nodes = @CurrentPage.AncestorsOrSelf(1).First().Children.WhereCanAccess();
但这会导致错误:
'Umbraco.Web.Models.DynamicPublishedContentList' does not contain a definition for 'WhereCanAccess'
Razor cheatsheet for Umbraco 的最新发布版本表示 HasAccess()IsProtected()是两种都可用的方法,但是当使用其中任何一种时,我都会得到空值,例如:
@foreach(var node in nodes.WhereCanAccess()) {
<li>@node.Name / @node.IsProtected / @node.IsProtected() / @node.HasAccess() / @node.HasAccess </li>
}

为所有测试值返回 null(例如 @node.IsProtected )。

似乎我想要实现的目标很简单,但我以错误的方式接近它。有人请指出我的方式的错误!

最佳答案

我检查用户对这样的页面的访问:

var node = [the page you want to verify access to ie. "CurrentPage"];
var isProtected = umbraco.library.IsProtected(node.id, node.path);
var hasAccess = umbraco.library.HasAccess(item.id, item.path);

我的顶级菜单代码:
   var homePage = CurrentPage.AncestorsOrSelf(1).First();
var menuItems = homePage.Children.Where("UmbracoNaviHide == false");
@foreach (var item in menuItems)
{
var loginAcces = umbraco.library.IsProtected(item.id, item.path) && umbraco.library.HasAccess(item.id, item.path);
var cssClass = loginAcces ? "loginAcces ":"";
cssClass += CurrentPage.IsDescendantOrSelf(item) ? "current_page_item" :"";

if(!umbraco.library.IsProtected(item.id, item.path) || loginAcces){
[render your item here]
}
}

这将隐藏 protected 项目,除非用户已登录并具有访问权限。

关于razor - Umbraco 7 隐藏导航节点用户无权访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24611534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com