abstract crud controller