2

私は Umbraco 5.1 ベータ版を使用しています。インターネット上で (この情報は以前のバージョンのものであり、最新のドキュメントは見つかりませんでした)、ユーザーがアクセス権を持っているかどうかをノードに尋ねることができることがわかりました。そうやってメニューを増やしていきたいと思っています。問題は、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>
4

1 に答える 1

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>
于 2012-04-18T09:08:36.237 に答える