Look into "Explicit Checkout" by disabling implicit checkout. Then users would be forced to check out before they receive write/change permission. It answers the "trying to save a read-only part" question by making it clear that a prior checkout is required to save a part. It incurs a small penalty on users by forcing them to checkout parts instead of the system trying to take care of it for them. If the penalty is acceptable then configuring explicit checkout is your solution.
See TC_Auto_Checkout TC_overwrite_protection TC_Enable_Implicit_CO