AuthorizeAction

wicket auth-role を使用した時にロール権限によるページリンクを有効/無効あるいは表示/非表示を、
いちいち、isVisible() オーバーライドや setVisible を呼んでいたのでは、たまらない。
そういう場合、AuthorizeAction アノテーションで制御するのが良い。

org.apache.wicket.markup.html.link.Link を継承したクラスに
AuthorizeAction を付与する。

import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.authorization.Action;
import org.apache.wicket.authorization.strategies.role.Roles;
import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeAction;
import org.apache.wicket.markup.html.link.Link;
/**
 * USER 権限のリンク、USERより下の権限は、リンクだけ無効
 */

@AuthorizeAction(action=Action.ENABLE , roles={Roles.ADMIN , Roles.USER } )
public class UserEnabelLink<T> extends Link<T>{
   private Class<? extends Page> page;
   private PageParameters params;
   public UserEnabelLink(String id,Class<? extends Page> page){
      super(id);
      this.page = page;
      this.params = null;
   }
   public UserEnabelLink(String id,Class<? extends Page> page,PageParameters params){
      super(id);
      this.page = page;
      this.params = params;
   }
   @Override
   public void onClick(){
      if (this.params==null){
         setResponsePage(this.page);
      }else{
         setResponsePage(this.page,this.params);
      }
   }
}
--------------------------------------------------------
/**
 * USER 権限のリンク、USERより下の権限は、リンク表示しない
 */

@AuthorizeAction(action=Action.RENDER , roles={Roles.ADMIN , Roles.USER } )
public class UserRenderLink<T> extends Link<T>{
   private Class<? extends Page> page;
   private PageParameters params;
   public UserRenderLink(String id,Class<? extends Page> page){
      super(id);
      this.page = page;
      this.params = null;
   }
   public UserRenderLink(String id,Class<? extends Page> page,PageParameters params){
      super(id);
      this.page = page;
      this.params = params;
   }
   @Override
   public void onClick(){
      if (this.params==null){
         setResponsePage(this.page);
      }else{
         setResponsePage(this.page,this.params);
      }
   }
}
---------------------------------------------------------
BookmarkablePageLink 継承で書くと、、(ADMIN権限のみの場合で)

@AuthorizeAction(action=Action.ENABLE , roles={Roles.ADMIN} )
public class AdminEnableLink<T> extends BookmarkablePageLink<T>{
   public AdminEnableLink(String id,Class<? extends Page> pageClass){
      super(id,pageClass);
   }
   public AdminEnableLink(String id,Class<? extends Page> pageClass,PageParameters parameters){
      super(id,pageClass,parameters);
   }
}

@AuthorizeAction(action=Action.RENDER , roles={Roles.ADMIN} )
public class AdminRenderLink<T> extends BookmarkablePageLink<T>{
   public AdminRenderLink(String id,Class<? extends Page> pageClass){
      super(id,pageClass);
   }
   public AdminRenderLink(String id,Class<? extends Page> pageClass,PageParameters parameters){
      super(id,pageClass,parameters);
   }
}