runAs Feature

This commit is contained in:
Peter Hormanns 2012-10-30 18:13:59 +01:00
parent c6bbeed75a
commit 05b105028c
11 changed files with 104 additions and 20 deletions

View File

@ -57,6 +57,7 @@
</init-param> </init-param>
</filter> </filter>
<filter-mapping> <filter-mapping>
<filter-name>CAS Validation Filter</filter-name> <filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern> <url-pattern>/*</url-pattern>
@ -93,11 +94,15 @@
<servlet-mapping> <servlet-mapping>
<servlet-name>HSAdmin Web</servlet-name> <servlet-name>HSAdmin Web</servlet-name>
<url-pattern>/*</url-pattern> <url-pattern>/MainApplication/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HSAdmin Web</servlet-name>
<url-pattern>/VAADIN/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<welcome-file-list> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file> <welcome-file>index.jsp</welcome-file>
</welcome-file-list> </welcome-file-list>
</web-app> </web-app>

View File

@ -4,12 +4,15 @@ import java.io.Serializable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.terminal.Sizeable; import com.vaadin.terminal.Sizeable;
import com.vaadin.terminal.ThemeResource; import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.Form; import com.vaadin.ui.Form;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Select;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window; import com.vaadin.ui.Window;
import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickEvent;
@ -28,23 +31,73 @@ public abstract class AbstractModule implements Module, Serializable {
private VerticalLayout layout; private VerticalLayout layout;
private Component component; private Component component;
private ComponentFactory componentFactory; private ComponentFactory componentFactory;
private Select selRunAs;
public Component getComponent() { public Component getComponent() {
return layout; return layout;
} }
public void reload() throws HsarwebException { public void reload() throws HsarwebException {
if (selRunAs != null) {
selRunAs.select(application.getRunAs());
selRunAs.setScrollToSelectedItem(true);
}
componentFactory.loadData(); componentFactory.loadData();
} }
private void initLayout() { private void initLayout() throws HsarwebException {
layout = new VerticalLayout(); layout = new VerticalLayout();
layout.setSizeFull(); layout.setSizeFull();
final Module thisModule = this; final Module thisModule = this;
final ModuleConfig moduleConfig = getModuleConfig(); final ModuleConfig moduleConfig = getModuleConfig();
final LocaleConfig localeConfig = application.getLocaleConfig(); final LocaleConfig localeConfig = application.getLocaleConfig();
if (this instanceof SearchAble || this instanceof InsertAble) { if (this instanceof SearchAble || this instanceof InsertAble ||
!("USER".equals(application.getLoginUserRole()) || "NONE".equals(application.getLoginUserRole()))) {
HorizontalLayout toolbar = new HorizontalLayout(); HorizontalLayout toolbar = new HorizontalLayout();
if (!("USER".equals(application.getLoginUserRole()) || "NONE".equals(application.getLoginUserRole()))) {
selRunAs = new Select();
selRunAs.setWidth(100.0f, Sizeable.UNITS_PIXELS);
selRunAs.setImmediate(true);
selRunAs.setNewItemsAllowed(false);
selRunAs.setNullSelectionAllowed(false);
if (!application.getLoginUserRole().startsWith("PAC")) {
// if (application.getLoginUserRole().startsWith("PAC")) {
//
// }
selRunAs.addItem(application.getLogin());
Object custListObj = application.getRemote().callSearch("member", new HashMap<String, String>());
if (custListObj instanceof Object[]) {
Object[] custList = (Object[]) custListObj;
for (Object custObj : custList) {
if (custObj instanceof Map<?, ?>) {
Map<?, ?> custHash = (Map<?, ?>)custObj;
selRunAs.addItem(custHash.get("membercode"));
}
}
}
}
Object pacListObj = application.getRemote().callSearch("pac", new HashMap<String, String>());
if (pacListObj instanceof Object[]) {
Object[] pacList = (Object[]) pacListObj;
for (Object pacObj : pacList) {
if (pacObj instanceof Map<?, ?>) {
Map<?, ?> pacHash = (Map<?, ?>)pacObj;
selRunAs.addItem(pacHash.get("name"));
}
}
}
selRunAs.select(application.getRunAs());
selRunAs.setScrollToSelectedItem(true);
selRunAs.addListener(new Property.ValueChangeListener() {
private static final long serialVersionUID = 1L;
@Override
public void valueChange(ValueChangeEvent event) {
Property property = event.getProperty();
application.setRunAs(property.getValue().toString());
}
});
toolbar.addComponent(selRunAs);
}
if (this instanceof InsertAble) { if (this instanceof InsertAble) {
Button btNew = new Button(moduleConfig.getLabel("new")); Button btNew = new Button(moduleConfig.getLabel("new"));
ThemeResource icon = new ThemeResource("../runo/icons/16/document-add.png"); ThemeResource icon = new ThemeResource("../runo/icons/16/document-add.png");

View File

@ -29,7 +29,7 @@ public abstract class DatabaseModule extends GenericModule {
protected void initModule() { protected void initModule() {
MainApplication application = getApplication(); MainApplication application = getApplication();
moduleConfig = new ModuleConfig(getModuleIdent(), application.getLocale()); moduleConfig = new ModuleConfig(getModuleIdent(), application.getLocale());
String login = application.getLogin(); String login = application.getRunAs();
final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; final String pac = login.length() >= 5 ? login.substring(0, 5) : "";
PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY);
idProp.setReadOnly(true); idProp.setReadOnly(true);

View File

@ -24,7 +24,7 @@ public abstract class DatabaseUserModule extends GenericModule {
protected void initModule() { protected void initModule() {
MainApplication application = getApplication(); MainApplication application = getApplication();
moduleConfig = new ModuleConfig(getModuleIdent(), application.getLocale()); moduleConfig = new ModuleConfig(getModuleIdent(), application.getLocale());
String login = application.getLogin(); String login = application.getRunAs();
final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; final String pac = login.length() >= 5 ? login.substring(0, 5) : "";
PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY);
idProp.setReadOnly(true); idProp.setReadOnly(true);

View File

@ -23,7 +23,7 @@ public class DomainModule extends GenericModule {
protected void initModule() { protected void initModule() {
MainApplication application = getApplication(); MainApplication application = getApplication();
moduleConfig = new ModuleConfig("domain", application.getLocale()); moduleConfig = new ModuleConfig("domain", application.getLocale());
String login = application.getLogin(); String login = application.getRunAs();
final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; final String pac = login.length() >= 5 ? login.substring(0, 5) : "";
PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY);
idProp.setReadOnly(true); idProp.setReadOnly(true);

View File

@ -22,7 +22,7 @@ public class EMailAddressModule extends GenericModule {
protected void initModule() { protected void initModule() {
MainApplication application = getApplication(); MainApplication application = getApplication();
moduleConfig = new ModuleConfig("emailaddress", application.getLocale()); moduleConfig = new ModuleConfig("emailaddress", application.getLocale());
String login = application.getLogin(); String login = application.getRunAs();
final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; final String pac = login.length() >= 5 ? login.substring(0, 5) : "";
PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY);
idProp.setReadOnly(true); idProp.setReadOnly(true);

View File

@ -22,7 +22,7 @@ public class EMailAliasModule extends GenericModule {
protected void initModule() { protected void initModule() {
MainApplication application = getApplication(); MainApplication application = getApplication();
moduleConfig = new ModuleConfig("emailalias", application.getLocale()); moduleConfig = new ModuleConfig("emailalias", application.getLocale());
String login = application.getLogin(); String login = application.getRunAs();
final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; final String pac = login.length() >= 5 ? login.substring(0, 5) : "";
PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY); PropertyConfig idProp = new PropertyConfig(moduleConfig, "id", Long.class, PropertyTableColumn.INTERNAL_KEY);
idProp.setReadOnly(true); idProp.setReadOnly(true);

View File

@ -95,7 +95,7 @@ public class HomeModule extends AbstractModule implements ComponentFactory, Upda
ThemeResource icon = new ThemeResource(moduleConfig.getLabel("change_password_icon")); ThemeResource icon = new ThemeResource(moduleConfig.getLabel("change_password_icon"));
button.setIcon(icon); button.setIcon(icon);
Map<String, String> whereHash = new HashMap<String, String>(); Map<String, String> whereHash = new HashMap<String, String>();
whereHash.put("name", application.getLogin()); whereHash.put("name", application.getRunAs());
Long key = -1L; Long key = -1L;
try { try {
Object object = application.getRemote().callSearch(moduleConfig.getRemoteName(), whereHash); Object object = application.getRemote().callSearch(moduleConfig.getRemoteName(), whereHash);

View File

@ -46,6 +46,9 @@ public class MainApplication extends Application implements HttpServletRequestLi
private Remote remote; private Remote remote;
private Map<String, Module> modules; private Map<String, Module> modules;
private Locale requestLocale; private Locale requestLocale;
private String role = "NONE";
private String runAs = null;
private TabSheet tabSheet;
@Override @Override
@ -56,7 +59,6 @@ public class MainApplication extends Application implements HttpServletRequestLi
} }
localeConfig = new LocaleConfig(locale, "main"); localeConfig = new LocaleConfig(locale, "main");
remote = new Remote(this); remote = new Remote(this);
String role = "NONE";
try { try {
Object rolesArrayObj = remote.callSearch("role", null); Object rolesArrayObj = remote.callSearch("role", null);
if (rolesArrayObj != null && rolesArrayObj instanceof Object[]) { if (rolesArrayObj != null && rolesArrayObj instanceof Object[]) {
@ -69,8 +71,8 @@ public class MainApplication extends Application implements HttpServletRequestLi
showSystemException(e); showSystemException(e);
} }
Window mainWindow = new Window(localeConfig.getText("applicationtitle")); Window mainWindow = new Window(localeConfig.getText("applicationtitle"));
TabSheet tabs = new TabSheet(); tabSheet = new TabSheet();
tabs.setSizeFull(); tabSheet.setSizeFull();
String modulesParamString = localeConfig.getText("modules." + role); String modulesParamString = localeConfig.getText("modules." + role);
modules = new HashMap<String, Module>(); modules = new HashMap<String, Module>();
Module firstModule = null; Module firstModule = null;
@ -84,13 +86,13 @@ public class MainApplication extends Application implements HttpServletRequestLi
ModuleConfig moduleConfig = module.getModuleConfig(); ModuleConfig moduleConfig = module.getModuleConfig();
String label = moduleConfig.getLabel("moduletitle"); String label = moduleConfig.getLabel("moduletitle");
modules.put(label, module); modules.put(label, module);
tabs.addTab((Component) module.getComponent(), label, new ThemeResource(moduleConfig.getLabel("moduleicon"))); tabSheet.addTab((Component) module.getComponent(), label, new ThemeResource(moduleConfig.getLabel("moduleicon")));
} catch (Exception e) { } catch (Exception e) {
showSystemException(e); showSystemException(e);
} }
} }
tabs.addListener(this); tabSheet.addListener(this);
mainWindow.setContent(tabs); mainWindow.setContent(tabSheet);
setMainWindow(mainWindow); setMainWindow(mainWindow);
setErrorHandler(new Terminal.ErrorListener() { setErrorHandler(new Terminal.ErrorListener() {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -106,6 +108,10 @@ public class MainApplication extends Application implements HttpServletRequestLi
} }
} }
public String getLoginUserRole() {
return role;
}
public String getProxyTicket() { public String getProxyTicket() {
return userPrincipal.getProxyTicketFor(servletContext.getInitParameter("backendURL")); return userPrincipal.getProxyTicketFor(servletContext.getInitParameter("backendURL"));
} }
@ -186,4 +192,24 @@ public class MainApplication extends Application implements HttpServletRequestLi
getMainWindow().showNotification("System-Fehler", "<br />Bitte informieren Sie den Support<br/ >" + e.getMessage(), Notification.TYPE_ERROR_MESSAGE); getMainWindow().showNotification("System-Fehler", "<br />Bitte informieren Sie den Support<br/ >" + e.getMessage(), Notification.TYPE_ERROR_MESSAGE);
} }
public String getRunAs() {
if (runAs == null) {
return getLogin();
}
return runAs;
}
public void setRunAs(String runAs) {
this.runAs = runAs;
Component selectedTab = tabSheet.getSelectedTab();
Tab tab = tabSheet.getTab(selectedTab);
Module module = modules.get(tab.getCaption());
try {
module.reload();
} catch (HsarwebException e) {
e.printStackTrace();
showSystemException(e);
}
}
} }

View File

@ -36,7 +36,7 @@ public class Remote {
private Object xmlrpcCall(String module, String operation, Map<String, String> param1) throws HsarwebException { private Object xmlrpcCall(String module, String operation, Map<String, String> param1) throws HsarwebException {
Object[] params = new Object[3]; Object[] params = new Object[3];
params[0] = app.getLogin(); params[0] = app.getRunAs();
params[1] = app.getProxyTicket(); params[1] = app.getProxyTicket();
params[2] = param1 != null ? param1 : new HashMap<String, String>(); params[2] = param1 != null ? param1 : new HashMap<String, String>();
return xmlrpcCall(module + "." + operation, params); return xmlrpcCall(module + "." + operation, params);
@ -44,7 +44,7 @@ public class Remote {
private Object xmlrpcCall(String module, String operation, Map<String, String> param1, Map<String, String> param2) throws HsarwebException { private Object xmlrpcCall(String module, String operation, Map<String, String> param1, Map<String, String> param2) throws HsarwebException {
Object[] params = new Object[4]; Object[] params = new Object[4];
params[0] = app.getLogin(); params[0] = app.getRunAs();
params[1] = app.getProxyTicket(); params[1] = app.getProxyTicket();
params[2] = param1 != null ? param1 : new HashMap<String, String>(); params[2] = param1 != null ? param1 : new HashMap<String, String>();
params[3] = param2 != null ? param2 : new HashMap<String, String>(); params[3] = param2 != null ? param2 : new HashMap<String, String>();

View File

@ -22,7 +22,7 @@ public class UnixUserModule extends GenericModule {
protected void initModule() { protected void initModule() {
MainApplication application = getApplication(); MainApplication application = getApplication();
moduleConfig = new ModuleConfig("user", application.getLocale()); moduleConfig = new ModuleConfig("user", application.getLocale());
String login = application.getLogin(); String login = application.getRunAs();
final String pac = login.length() >= 5 ? login.substring(0, 5) : ""; final String pac = login.length() >= 5 ? login.substring(0, 5) : "";
PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN, new SelectPropertyFieldFactory()); PropertyConfig pacProp = new PropertyConfig(moduleConfig, "pac", String.class, PropertyTableColumn.HIDDEN, new SelectPropertyFieldFactory());
pacProp.setSelectValues(new PropertySelectValues() { pacProp.setSelectValues(new PropertySelectValues() {