2012-04-08 3 views
2

Umbraco 5.1 betaを使用しているImです。インターネット上で(この情報は以前のバージョンのものであり、最近のドキュメントは見つかりませんでした)、ユーザーにアクセス権があるかどうかをノードに問い合わせることができます。こうして私はメニューを作りたいと思う。問題は、動作させることができない、HasAccessおよびIsProtectedプロパティが機能していないことです。私は間違って何をしていますか?それとも、Umbracoの新しいバージョンでは違うのですか?Umbraco 5は、ユーザがノードへのアクセス権を持っているかどうかを尋ねます

@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> 

答えて

4

あなただけのユーザーがアクセスすることはできませんノードを抑制するために探している場合:これは私が今使っているコードです

を(私はまた方法、まだ結果としてそれを試してみました)。その後、WhereCanAccess()メソッドを使用できます。

例:そうですIsProtectedノードは(多少複雑であることを場合見つけようとして

@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> 
+0

は、病気は、今夜それを試してみる)保護されたメニュー項目名の横に*を置きます。 – Patrick

+0

助けてくれてありがとう。これは機能します。今、私はログインウィジェットを構築する方法を理解する必要があります。私は、デフォルトのsollutionにあったloginformtemplateからマクロを作成しようとしましたが、動作しません。多分あなたに提案がありますか? – Patrick

+0

この質問はUmbraco 5を明示的に尋ねていますが、Umbraco 7でこれを使用する場合は[MemberHasAccess](https://our.umbraco.org/Documentation/reference/Querying/UmbracoHelper/#memberhasaccess-int-nodeid-文字列パス) –

関連する問題