2010-05-25 4 views
4

J'utilise un IAuthorizationStrategy dans le portillon pour limiter l'accès à certaines pages. Cependant, j'utilise également des menus html comme celui-ci:Dans le portillon, combinez le portillon: lien avec IAuthorizationStrategy

<div class="siteMenu"> 
<wicket:link> 
    <a href="Page1.html" class="siteMenuLink"> 
     <wicket:message key="pages.page1.title" /> 
    </a> 
    <a 
     href="Page2.html" class="siteMenuLink"> 
     <wicket:message key="pages.page2.title" /> 
    </a> 
    <a 
     href="Page3.html" class="siteMenuLink"> 
     <wicket:message key="pages.page3.title" /> 
    </a> 
</wicket:link> 
</div> 

, qui sont automatiquement pris et étendu en utilisant le mécanisme wicket:link (comme ici: http://wicket.apache.org/examplenavomatic.html). Cependant, le IAuthorizationStrategy ne peut pas autoriser une ou plusieurs de ces pages cibles, donc je peux finir avec beaucoup de liens qui conduisent à des pages "permission denied" ou beaucoup de liens désactivés (ie em tags ou similaires), ni dont c'est joli.

Je pourrais bien écrire bien sûr un IComponentInstantiationListener qui vérifie tous les BookmarkableLinks pour voir si leur cible est accessible par le IAuthorizationStrategy et les rend invisibles autrement, mais je me demande s'il y a une solution hors-the-box à ce problème. Pour plus de clarté: je n'utilise que la méthode isInstantiationAuthorized() de IAuthorizationStrategy.

+1

@esko: merci pour l'édition, je ne connaissais pas encore les liens intégrés. –

+0

Pas de problème :) Rappelez-vous, ce site est construit par des programmeurs pour les programmeurs, il y a beaucoup de fonctionnalités utiles sous l'habillage de base. – Esko

Répondre

3

En fait, j'étais aveugle. La réponse est évidente. Étendre la stratégie d'autorisation pour vérifier les liens vers les pages, puis utiliser un IUnauthorizedComponentInstantiationListener pour les rendre invisibles

+0

Vous pouvez accepter votre propre réponse :) – Dolph

+0

oui, en deux jours :-) –

+0

Avez-vous l'occasion de poster quelques exemples de ce que vous avez fait? J'aiderais d'autres personnes comme moi à prendre une longueur d'avance, car je pense que vous essayez exactement ce que je suis après. – stevemac

Questions connexes