2012-04-08 2 views
2

Ich arbeite mit Umbraco 5.1 beta. Im Internet (diese Information stammt aus früheren Versionen, konnte keine aktuelle Dokumentation darüber finden) Ich stelle fest, dass ich einen Knoten fragen könnte, ob der Benutzer Zugriff hat. Auf diese Weise möchte ich meine Speisekarte aufbauen. Die Sache ist, ich kann es nicht zum Laufen bringen, die Eigenschaften HasAccess und IsProtected funktionieren nicht. Was mache ich falsch? Oder funktioniert es anders in den neueren Versionen von Umbraco? (Ich habe versucht, es auch als Methode, noch kein Ergebnis)Umbraco 5 fragen, ob der Benutzer die Berechtigung zum Knoten hat

Dies ist der Code Ich bin jetzt mit:

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

Antwort

4

Wenn Sie gerade suchen Knoten zu unterdrücken, dass der Benutzer keinen Zugriff haben. Dann können Sie die WhereCanAccess() -Methode verwenden.

Beispiel: (Damit werden alle untergeordneten Knoten verstecken, dass der Benutzer keinen Zugriff auf)

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

Der Versuch, wenn ein Knoten zu finden IsProtected etwas komplexer zu sein scheint (obwohl nur ein paar Zeilen . Code Nun, der einzige Weg, fand ich es trotzdem tun finden)

Beispiel: (Dieser setzt nur ein * neben dem Namen der geschützten Menüpunkte)

@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

Ill versuchen sie es heute Abend. – Patrick

+0

Danke für die Hilfe. Das funktioniert. Jetzt muss ich nur herausfinden, wie man ein Login-Widget erstellt. Ich versuche, ein Makro aus dem Loginformtemplate zu erstellen, das in der Standardlösung war, aber es funktioniert nicht. Hast du vielleicht einen Vorschlag? – Patrick

+0

Ich weiß, dass diese Frage explizit nach Umbraco 5 fragt, aber wenn Sie dies in Umbraco 7 verwenden möchten, verwenden Sie [MemberHasAccess] (https://our.umbraco.org/Documentation/reference/Query/UmbracoHelper/#memberhasaccess-int-nodeid- Zeichenfolgenpfad) –

Verwandte Themen