I always found access ULS cumbersome to use - once the database gets biggish, it becomes very hard to manage, and a total beast to change
the way a lot of commercial progs do it is to
a) in some cases, assign users to groups
b) give the users or groups a privilege level (say 1 to 9)
c) give the individual forms an access requirement (say 4)
so if the form has a requirement of 4, then the user needs to have a privilege level of 4+, or maybe be in a group that has a level of 4+ to "see" that form. When you display the menu, you could either elect to leave the option, but not allow access - or remove the menu option altogether
I would think commercial progs tend to go the group way
Lets call this vertical security - this isnt too hard to implement at all
-------------
what is more difficult is horizontal security - where you want a user to be able to see data for his branch, but not for others. This cannot be managed by any normal security level system. You actually have to manage this at the data level to filter the information. Much more complex for the developer.
This vertical
time you add a