@CacheNameRemove(name = AppConstants.DEFAULT_CACHENAME) @Before({AdminValidator.PermSaveValidator.class, Tx.class}) public void permSave() { Permission permission = getModel(Permission.class); Permission parent = null; if (permission.getParentId() == 0) { parent = Permission.dao.findFirstBy("`permission`.pid=0 ORDER BY `permission`.right_code DESC"); } else parent = Permission.dao.findById(permission.getParentId()); boolean result = false; if (!ValidateUtils.me().isNullOrEmpty(parent)) { Permission.dao.updateBy( "`permission`.left_code=`permission`.left_code+2", "`permission`.left_code>=" + parent.get("right_code")); Permission.dao.updateBy( "`permission`.right_code=`permission`.right_code+2", "`permission`.right_code>=" + parent.get("right_code")); permission.set("left_code", parent.getLong("right_code")); permission.set("right_code", parent.getLong("right_code") + 1); permission.set("created_at", new Date()); if (ValidateUtils.me().isNullOrEmpty(permission.get("id"))) { permission.remove("id"); } result = permission.save(); } if (result) { Role admin = Role.dao.findFirstBy("`role`.pid=0"); admin.addPermission(permission); setAttr("state", "success"); } else { setAttr("state", "failure"); } dynaRender("/view/admin/role.ftl"); }