code: public String edit() {
      Role role = (Role) getEntity();
      User me = userService.get(SecurityUtils.getUsername());
      if (role.isPersisted()) {
        if (!roleService.isAdmin(me, role)) {
          if (null != role.getParent())
            return redirect("search", "不能修改该组,你没有" + role.getParent().getName() + "的管理权限");
          else return redirect("search", "不能修改该组,你没有Root的管理权限");
        }
      }
      put("role", role);
      OqlBuilder<Role> query = OqlBuilder.from(getEntityName(), "role");
      if (!isAdmin()) {
        query.join("role.members", "gm");
        query.where("gm.user=:me and gm.manager=true", me);
      }
      List<Role> parents = entityDao.search(query);
      parents.removeAll(HierarchyEntityUtils.getFamily(role));
      put("parents", parents);
      return forward();
    }
docs: 对组可管理意为<br>
  1 建立下级组
  2 移动下级组顺序
  不能改变组的1）权限和2）直接成员，3）删除组，4）重命名，这些将看作组同部分一起看待的。
  只要拥有上级组的管理权限，才能变更这些，这些称之为写权限。
  成员关系可以等价于读权限
  授权关系可以等价于读权限传播
  拥有某组的管理权限，不意味拥有下级组的管理权限。新建组情况自动授予该组的其他管理者管理权限。