Correct. To make it sticky, save/load from the DB.
I'd say this is much easier and more transparent than diving into using SDK functions, especially if you get another engineer who knows nothing about the project/customization data. (That's my opinion anyways). It would also essentially 'live' in only one or two places, the session startup handler and the user id value change event, as opposed to every component that needed some sort of customization.
You could have a structure something along the lines of:
personalization
├ Tables
│ ├ TableTypeA
│ │ ├ Columns
│ │ ├ Filters
│ │ └ Rows
│ └ TableTypeB
│ └ Columns
├ Graphs
│ ├ GraphTypeA
│ └ GraphTypeB
└ ETC...
All your script would need to do is poll the DB for the provided user and transform the data into the correct structure and place that structure into the session property. Simple 3 line script for the event.
databasePersonalizationData = system.db.runNamedQuery("GetPersonalization", {"OperatorId": operatorId})
personalizationObject = personalizationDataToObject(databasePersonalizationData)
session.custom.personalization = personalizationObject
with personalizationDataToObject
doing all the structure transformation.