package org.beanfuse.webapp.security.action; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.beanfuse.collection.Order; import org.beanfuse.collection.page.PageLimit; import org.beanfuse.collection.page.SinglePage; import org.beanfuse.query.Condition; import org.beanfuse.query.EntityQuery; import org.beanfuse.security.Group; import org.beanfuse.security.User; import org.beanfuse.security.menu.MenuProfile; import org.beanfuse.security.menu.service.MenuAuthorityService; import org.beanfuse.security.monitor.SecurityMonitor; import org.beanfuse.security.online.SessionActivity; import org.beanfuse.security.restriction.RestrictionHolder; import org.beanfuse.security.service.UserService; import org.beanfuse.struts2.route.Action; import org.beanfuse.webapp.security.helper.RestrictionHelper; public class UserDashboardAction extends SecurityAction { private MenuAuthorityService menuAuthorityService; private SecurityMonitor securityMonitor; private UserService userService; protected void indexSetting() { User user = getUser(); buildDashboard(user); } private void buildDashboard(User user) { put("user", user); populateMenus(user); populateSessionActivities(user); populateOnlineActivities(user); RestrictionHelper helper = new RestrictionHelper(entityService); helper.setRestrictionService(restrictionService); helper.populateInfo((RestrictionHolder) user); } public String dashboard() { Long userId = getLong("user.id"); User managed = (User) entityService.get(User.class, userId); User manager = getUser(); if (userService.isManagedBy(manager, managed)) { buildDashboard(managed); return forward(); } else { return forward(ERROR); } } private void populateOnlineActivities(User user) { Collection onlineActivities = securityMonitor.getSessionController().getOnlineActivities( user); put("onlineActivities", onlineActivities); } private void populateSessionActivities(User user) { EntityQuery onlineQuery = new EntityQuery(SessionActivity.class, "sessionActivity"); onlineQuery.add(new Condition("sessionActivity.name =:name", user.getName())); onlineQuery.addOrder(Order.asc("sessionActivity.loginAt desc")); onlineQuery.setLimit(new PageLimit(1,5)); SinglePage page = (SinglePage) entityService.search(onlineQuery); put("sessionActivities", page.getItems()); } private void populateMenus(User user) { EntityQuery query = new EntityQuery(MenuProfile.class, "menuProfile"); query.add(new Condition("menuProfile.category in(:categories)", user.getCategories())); List menuProfiles = (List) entityService.search(query); put("menuProfiles", menuProfiles); Long menuProfileId = getLong("menuProfileId"); if (null == menuProfileId && !menuProfiles.isEmpty()) { menuProfileId = ((MenuProfile) (menuProfiles.get(0))).getId(); } if (null != menuProfileId) { MenuProfile menuProfile = (MenuProfile) entityService.get(MenuProfile.class, menuProfileId); List menus = menuAuthorityService.getMenus(menuProfile, user); Set resources = new HashSet(authorityService.getResources(user)); Map groupMap = new HashMap(); Map groupMenusMap = new HashMap(); for (Iterator iterator = user.getGroups().iterator(); iterator.hasNext();) { Group group = (Group) iterator.next(); groupMap.put(group.getId().toString(), group); groupMenusMap.put(group.getId().toString(), menuAuthorityService.getMenus( menuProfile, group)); } put("menus", menus); put("groupMap", groupMap); put("groupMenusMap", groupMenusMap); put("resources", resources); } } public String restrictionInfo() { User user = getUser(); return forward(new Action(RestrictionAction.class, "info", "&restriction.holder.id=" + user.getId() + "&restrictionType=user")); } public void setMenuAuthorityService(MenuAuthorityService menuAuthorityService) { this.menuAuthorityService = menuAuthorityService; } public void setSecurityMonitor(SecurityMonitor securityMonitor) { this.securityMonitor = securityMonitor; } public void setUserService(UserService userService) { this.userService = userService; } }