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);
}
}