一把umbraco 5问,如果用户有权限节点(Umbraco 5 ask if user has p

2019-09-16 10:04发布

林用一把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>

Answer 1:

如果你只是希望抑制的用户无法访问节点。 然后你可以使用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>


文章来源: Umbraco 5 ask if user has permission to node
标签: umbraco