/**
  * Anyone can read typeacl.
  *
  * @param typename
  * @return
  */
 @Path("/typeacl/{typename}")
 @GET
 public TypeACL getTypeACL(@PathParam("typename") String typename) {
   TypeACL typeACL = securityEM.find(TypeACL.class, typename);
   if (typeACL == null) {
     typeACL = new TypeACL();
     typeACL.setTypeid(typename);
   }
   for (RolePermission p : typeACL.getRolePermissions()) {
     p.setTypeACL(null);
   }
   for (PropertyPermission p : typeACL.getPropPermissions()) {
     p.setTypeACL(null);
   }
   return typeACL;
 }
 @Path("/typeacl")
 @POST
 public void saveTypeACL(TypeACL typeACL) {
   if (permissionChecker.hasPermission(
       ACLHelper.getActionByName(GrantAction.NAME),
       roleContext.getRoles(),
       typeACL.getTypeid(),
       null)) {
     throw new AuthorizedException(InstanceActionType.GRANT, null);
   }
   for (RolePermission p : typeACL.getRolePermissions()) {
     p.setTypeACL(typeACL);
   }
   for (PropertyPermission p : typeACL.getPropPermissions()) {
     p.setTypeACL(typeACL);
   }
   securityEM.getTransaction().begin();
   securityEM.merge(typeACL);
   securityEM.getTransaction().commit();
   ACLHelper.typeacls.put(typeACL.getTypeid(), typeACL);
 }