public User editUserPrivileges(Long userId, long bitmap, User currentUser) {
    User user = getUserById(userId);
    EntityTransaction transaction = null;

    if (user != null && currentUser != null) {
      if (!currentUser.isUserPromote() && !currentUser.isUserDemote()) {
        return null;
      }

      Privileges privileges = new Privileges(bitmap);
      transaction = startSaveTransaction();

      user.setCategoryRead(privileges.isCategoryRead());
      user.setCategoryWrite(privileges.isCategoryWrite());
      user.setCategoryDelete(privileges.isCategoryDelete());
      user.setItemRead(privileges.isItemRead());
      user.setItemWrite(privileges.isItemWrite());
      user.setItemDelete(privileges.isItemDelete());
      user.setItemCommentRead(privileges.isItemCommentRead());
      user.setItemCommentWrite(privileges.isItemCommentWrite());
      user.setItemCommentDelete(privileges.isItemCommentDelete());
      user.setUserPromote(privileges.isUserPromote());
      user.setUserDemote(privileges.isUserDemote());
      user.setUserDelete(privileges.isUserDelete());
    }

    try {
      entityManager.persist(user);
      transaction.commit();
      return user;
    } catch (Exception e) {
      transaction.rollback();
    }

    return null;
  }