Am trying to design a nicely normalized schema for sharing entities in a database, with good referential integrity.
It should work similarly to Google Docs sharing.
Here is what I have so far:

Where a roleType is in {owner=1, viewer=2, commenter=3, editor=4}
A public permission allows for a document to be shared anonymously. An alternative would be to have a "magic" anonymous email address, but I am not so sure about that one.
A document can have one or zero publicPermissions or many explicitPermissions.
What other designs are out there, or what improvements can I make?