ServiceSelector selector = null;
AccessControllerResolver acResolver = null;
AccessController accessController = null;
UsecaseResolver usecaseResolver = null;
UsecaseAuthorizer authorizer = null;
String usecaseName = tab.getUsecase();
if (usecaseName == null) {
throw new IllegalArgumentException("The usecase name of the tab [" + tab.getName() + "] is null.");
}
try {
selector = (ServiceSelector) this.manager.lookup(AccessControllerResolver.ROLE
+ "Selector");
acResolver = (AccessControllerResolver) selector.select(AccessControllerResolver.DEFAULT_RESOLVER);
accessController = acResolver.resolveAccessController(this.webappUrl);
Authorizer[] authorizers = accessController.getAuthorizers();
for (int i = 0; i < authorizers.length; i++) {
if (authorizers[i] instanceof UsecaseAuthorizer) {
authorizer = (UsecaseAuthorizer) authorizers[i];
}
}
usecaseResolver = (UsecaseResolver) this.manager.lookup(UsecaseResolver.ROLE);
// filter item if usecase not allowed
if (tab.getUsecase() != null) {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Found usecase [" + tab.getUsecase() + "]");
}
DocumentFactory factory;
ContextUtility util = null;
try {
util = (ContextUtility) this.manager.lookup(ContextUtility.ROLE);
Request request = util.getRequest();
factory = DocumentUtil.getDocumentFactory(this.manager, request);
} finally {
if (util != null) {
this.manager.release(util);
}
}
Publication pub = PublicationUtil.getPublicationFromUrl(this.manager,
factory,
this.webappUrl);
if (!authorizer.authorizeUsecase(usecaseName, this.roles, pub)) {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Usecase not authorized");
}
messages = new UsecaseMessage[1];
messages[0] = new UsecaseMessage("Access denied");