1

いくつかのカスタム クエリを作成しており、メンバー グループとドキュメント グループの関係を把握する必要があります。

私の最終的な目標は、ユーザーがログインしたときに特定のユーザー グループに属するリソースを表示することです。セッションからユーザー ID を取得できるため、これまでに把握した関係は次のとおりです。

ユーザー ID -> メンバー グループ テーブル -> ??Unknown table that pairs Member Groups with Document Groups??-> ドキュメント グループ テーブル -> リソース テーブル

見つからないテーブルが見つかりません!

誰かが私を助けることができれば、それは素晴らしいことです!

ありがとう

(ps:Revoを使用)

編集:支援のための画像を追加

ここに画像の説明を入力

4

2 に答える 2

0

これが本当に古いことは知っていますが、自分で答えを探しているときにこの質問に出くわしました。もう少し掘り下げた後、リンクしているのはaccess_resource_groupsテーブルであることがわかりましたdocument_groupsmember_groups

  • document_groups.id=access_resource_groups.target
  • member_groups.id=access_resource_groups.principal
于 2016-08-25T16:29:44.980 に答える
0

これを実現するために、組み込みの MODX メソッドのいくつかを使用できます。

これはテストされておらず、機能しない可能性がありますが、次の方法で実行できる可能性があります。

// userGroups = membergroups
$userGroups = $user->getUserGroups();

foreach ($userGroups as $userGroup) {
    $resGroups = $userGroup->getResourceGroups(); 

    foreach ($resGroups as $resGroup) {
        $resources = $resGroup->getResources();
        // merge resources into an array or something

    }
}

moduser.class.phpmodusergroup.class.php、およびmodresourcegroup.class.phpをチェックして、これらのメソッドの背後にあるクエリを確認してください。それらを 1 つのより効率的なクエリに適合させることができる場合があります。

また、あなたが達成したいことを誤解していなければ、あなたの結果は、ユーザーがログインしたときにマネージャーのリソース ツリーに表示されるものと似ているはずです。

これは、resource/getnodes.class.php プロセッサを使用します。このプロセッサは、getCollection を使用してコンテキストごとに可能なすべてのリソースを取得し、それぞれをループして、 を使用して表示するかどうかを決定します$resource->checkPolicy('list')。それは考慮すべき別のアプローチかもしれません。

私は通常、MODX リソースではなくカスタム データを使用するので、これをどのように進めているかを知りたいと思っています。

于 2012-12-16T13:41:22.207 に答える