A third option is for read-only users to use EA Lite, which allows for display only. It's a
free download, but IIRC it doesn't necessarily display everything the way the full client does. Specifically, I think it doesn't do shape scripts. I may be wrong on that, and if you don't know what shape scripts are you're probably not using them so it shouldn't be a problem.
User security can be set up a few different ways, but what you get is a situation where you either can lock things you want to protect or (more commonly used) you must lock things before you can change them. (Yes, the word "lock" means different things in the two setups.)
With user security, you can select which users have modification priviliges and which have read-only. You cannot, however, assign those privileges differently in different parts (packages) of your project; they're global within each repository.
User security requires at least the Corporate
edition, and in order to enable it you need to be a registered user at the Sparx site.
External
version control can also be used, but if all you need is to prevent accidental changes it's not the way to go. Any edition can do version control.
Finally, you could write a script (or an Add-In) which uses the API to set
Element.Locked and
Diagram.IsLocked in those parts of the project you want to protect. I believe this is essentially what the version control functionality uses.
Scripting also requires the Corporate edition.
I strongly advise against hacking something up yourself, but you did ask for all the options.
HTH,
/Uffe