私はしばらく前に同様の懸念に遭遇しました。私がついに思いついた解決策は、そのトリックを完璧に実行した小さなjsライブラリ、つまりDraculaです。
ライブラリへのリンクは次のとおりです:https ://github.com/strathausen/dracula
あなたのニーズを考えると、あなたがしなければならないのは次のようなものだけです:
var g = new Graph();
g.addEdge('author', 'create');
g.addEdge('author', 'reader');
g.addEdge('author', 'admin');
// add here the other edges.
var layouter = new Graph.Layout.Spring();
layouter.layout();
var renderer = new Graph.Renderer.Raphael('#canvas', g, 400, 300);
renderer.draw();
詳細については、ドキュメントで苦労させていただきます。
それが役に立てば幸い。
[補遺]
一般的に言って、ノードと矢印を表示することは大した問題ではなく、svgを使用すると簡単になります。しかし、「交差するエッジの数を最小限に抑えるようにする」、「親の下に子を表示する」など、すべて複雑な数学を必要とするルールを使用してノードの表示を整理する場合は、事態が複雑になります。
ドラキュラがそのようなルールをカスタマイズすることを許可しているとは思いません。それでも、あなたのコメントを考えると、それは非巡回グラフであるため、レイアウトを垂直ツリーのように見せるためのそれほど複雑ではない方法があると思います(少なくともそうです)。ただし、このために独自のライブラリを作成する必要があります。