One way is that when a user registers, a container with his name or userid is created and the user will only have access to that container.
I’ve implemented it as you describe above (and actually, in a way also your second method, i used for blackboards). The application i did (social network) uses only front-end for everything, from administration to content editing, etc.. manager is never used as i (and the admins and surely the end users) dislike it.. it’s not customizable enough (surely without breaking the core code) - and mostly - in revo, it is very simple to make your own front-end, exactly as your client wants.
To link the user to his container - I extended modUser class so the user also has ’profileId’ - which is the id of his container document. yet, this is not mandatory, you can just run a query based on ’createdby’, for example.
Get to know also $modx->hasPermissions, although not necessary for what you describe - it can be very helpful once your logic grows beyond just:
if (createdby = user->get(’id’)).
Security is also not an issue, as your processors will always start with this check (createdby=userid?) - so nobody can try to change other’s content.
I just want to understand how this would work in Revolution. Would a custom module be the right way to go?
Processors is the way to go. This (+xpdo) is truly one of the best things in revolution, imho..
I advice you to look at: \core\model\modx\processors
You’ll find at least 80% of your code already there.. another tip is to use firebug’s NET tab to trace what’s going on when using the manager for actions you’re interested to have in the front-end.
For simpler stuff - you can also combine [[formit]] with your own hook (which is the same idea, more or less..)