* @return
* @throws Exception
*/
public String save() {
Group mao = entityDao.get(Group.class, getLong("group.id"));
MenuProfile menuProfile = (MenuProfile) entityDao.get(MenuProfile.class,
getLong("menuProfileId"));
Set<Resource> newResources = CollectUtils.newHashSet(entityDao.get(Resource.class,
SeqStrUtils.transformToLong(get("resourceId"))));
// 管理员拥有的菜单权限和系统资源
User manager = getUser();
Set<Menu> mngMenus = null;
Set<Resource> mngResources = CollectUtils.newHashSet();
if (isAdmin(manager)) {
mngMenus = CollectUtils.newHashSet(menuProfile.getMenus());
} else {
mngMenus = CollectUtils.newHashSet(authorityService.getMenus(menuProfile,
(User) manager));
}
for (final Menu m : mngMenus) {
mngResources.addAll(m.getResources());
}
// 确定要删除的菜单和系统资源
// Set<MenuAuthority> removedMenus = CollectionUtil.newHashSet();
// for (MenuAuthority ma : mao.getMenuAuthorities()) {
// if (mngMenus.contains(ma.getMenu()) &&
// ma.getMenu().getProfile().equals(menuProfile)) {
// if (!newMenus.contains(ma.getMenu())) {
// removedMenus.add(ma);
// } else {
// newMenus.remove(ma.getMenu());
// }
// }
// }
Set<Authority> removedResources = CollectUtils.newHashSet();
for (final Authority au : mao.getAuthorities()) {
if (mngResources.contains(au.getResource())) {
if (!newResources.contains(au.getResource())) {
removedResources.add(au);
} else {
newResources.remove(au.getResource());
}
}
}
// 删除菜单和系统资源
// mao.getMenuAuthorities().removeAll(removedMenus);
mao.getAuthorities().removeAll(removedResources);
// 添加新的菜单和系统资源
// for (Menu menu : newMenus) {
// MenuAuthority authority = Model.newInstance(MenuAuthority.class);
// authority.setGroup(mao);
// authority.setMenu(menu);
// mao.getMenuAuthorities().add(authority);
// }
for (Resource resource : newResources) {
Authority authority = Model.newInstance(Authority.class);
authority.setGroup(mao);
authority.setResource(resource);
mao.getAuthorities().add(authority);
}
entityDao.saveOrUpdate(mao);
authorityManager.refreshGroupAuthorities(new GrantedAuthorityBean(mao.getName()));
Action redirect = Action.to(this).method("edit");
redirect.param("group.id", mao.getId()).param("menuProfileId", menuProfile.getId());
String displayFreezen = get("displayFreezen");
if (null != displayFreezen) {
redirect.param("displayFreezen", displayFreezen);
}
return redirect(redirect, "info.save.success");