Umbraco の以前のバージョン (つまり 5) で、これが比較的簡単に見える例をいくつか見てきました。たとえば、このstackoverflowの質問を参照してください。
理論的には、使用するノードを選択するときに、プロパティHasAccess
またはIsProtected
ノード、またはメソッドを使用できるというものです。WhereHasAccess
私がこれまでに持っているコードは次のとおりです。
var nodes = @CurrentPage.AncestorsOrSelf(1).First().Children;
これでページのリストが表示されますが、問題ありません。ただし、ログインしたユーザーにはアクセスできるものだけが表示され、一般の訪問者には保護されたページが表示されないように、ページのリストをフィルター処理するのに苦労しています。
V5 コードは、これが可能であることを示唆しています。
var nodes = @CurrentPage.AncestorsOrSelf(1).First().Children.WhereCanAccess();
しかし、これはエラーになります:
'Umbraco.Web.Models.DynamicPublishedContentList' does not contain a definition for 'WhereCanAccess'
Umbracoの Razor チートシートの最新の公開バージョンは、HasAccess()
とIsProtected()
が両方とも利用可能な 2 つの方法であることを示していますが、これらのいずれかを使用すると null 値が得られます。
@foreach(var node in nodes.WhereCanAccess()) {
<li>@node.Name / @node.IsProtected / @node.IsProtected() / @node.HasAccess() / @node.HasAccess </li>
}
すべてのテスト値に対して null を返します (例: @node.IsProtected
)。
私が達成しようとしていることは単純なようですが、間違った方法でアプローチしています。誰か私のやり方の間違いを指摘してください!