ユーザーが特定の ID に対する権利を持っているかどうかを知る方法を教えてくれませんでした。それは必要な情報です。以下に、hasRights という列をクエリに追加することを前提としたコードをいくつか示します。 ユーザーが権限を持っていない場合、この列の値はゼロになり、権限がある場合は値が 1 になります。テストするデータがないため、これを微調整する必要があるかもしれませんが、うまくいけば、それに近づくことができます。
基本的に、クエリは、ユーザーが権限を持っている場合にのみレベルに 1 を追加するように変更されます。また、ユーザーが権限を持っている場合にのみソート パスに追加され、そうでない場合は空の文字列が追加されます。したがって、ID 8 と 9 がユーザーがアクセスできる唯一のアイテムである場合、レベル 1 と 2 が表示され、「5/6/8/9」ではなく「5/8/9」のようなソート パスが表示されます。それでもうまくいかない場合は、サンプル スキーマを SqlFiddle に投稿していただけると非常に助かります。
WITH Tree AS ( SELECT id, parent, 0 AS Level, id AS Root, hasRights AS HasRights, CAST(id AS VARCHAR(MAX)) AS Sort, user_id FROM SourceTable WHERE parent IS NULL UNION ALL SELECT st.id, st.parent, Level + st.hasRights AS Level, st.parent AS Root, st.hasRights AS HasRights, uh.sort + CASE st.hasRights WHEN 0 THEN '' ELSE '/' + CAST(st.id AS VARCHAR(20)) END AS Sort, st.user_id FROM SourceTable AS st JOIN Tree uh ON uh.id = st.parent ) SELECT * FROM Tree AS t JOIN UserTable AS ut ON ut.id = t.user_id AND ut.user_id = '141F-4BC6-8934' ORDER BY Sort
プレ>