Dangling case: Deleting an element would imply deleting its (transitive) contents, as well as its attributes and incoming/outgoing references -> deny if there are such hidden dangling stuff.
To-one case: Adding a to-one attribute fact, or a to-one/one-to relation fact implies removing the old value. Deny if such a hidden old value exists. Important: this check must be performed somehow before the actual model manipulation is carried out!
In both cases, it is sufficient to check for hidden stuff. If the prohibiting model facts are visible to the user, then other rules (specifically the deletion of these facts) would already catch the problem.
Dangling case: Deleting an element would imply deleting its (transitive) contents, as well as its attributes and incoming/outgoing references -> deny if there are such hidden dangling stuff.
To-one case: Adding a to-one attribute fact, or a to-one/one-to relation fact implies removing the old value. Deny if such a hidden old value exists. Important: this check must be performed somehow before the actual model manipulation is carried out!
In both cases, it is sufficient to check for hidden stuff. If the prohibiting model facts are visible to the user, then other rules (specifically the deletion of these facts) would already catch the problem.