web-dev-qa-db-ja.com

ビューでアクセスを確認する

Drupal.orgに support request を投稿しましたが、ここでもっと速い答えが見つかるかもしれません。

ユーザー関係モジュールを使用して、コンテンツを表示する目的で2人のユーザー間の相互関係を作成しています。 URのノードアクセス部分は正常に動作しているようです。しかし、ビューに問題があります。

誰かが私に次のようにする方法を説明できますか?

  • ユーザー(現在ログインしているユーザーではない)が作成したコンテンツを含むビューを作成し、コンテンツタイプでフィルターします(これを画像と呼びます)。このビューには、user /%/ imagesのような引数を持つパスがあります。
  • 現在のユーザーがuser /%/ imagesに移動すると、両方のユーザーが関連/承認された関係である場合にのみ、引数として渡されたユーザーIDの画像が表示されます。 Webサイトには1つの関係タイプのみがあります。関係がない場合は、アクセス拒否、または少なくともページが見つかりませんでした。しかし、403の方が理にかなっています。

これを機能させることができません。

私の目標は、ユーザーが作成したさまざまなタイプのコンテンツへのリンクを表示することであり、表示ユーザー(要求者?)はコンテンツを表示するための関係を持っている必要があります。それ以外の場合は、何も表示されないか、アクセス拒否エラーが返されます。

4
Kevin

必要なのは、カスタムビューアクセスプラグインを作成することです。これを行う方法に関する基本的な情報を含むブログ投稿をここに見つけました: http://techcp.wordpress.com/2011/01/11/adding-custom-access-plugin-to-views-in -drupal /

次に、少なくとも次の2つのことを行う必要があります。

a)これを拡張して、アクセスコールバック関数が2番目のurl引数を引数として受け取るようにします(function get_access_callback()では、array()array(1)に変更します)。

b)定義済みアクセスコールバック関数で、現在ログインしているユーザーと渡されるuidの間に関係があるかどうかを確認するには、 ser_relationships_load() を使用します(ドキュメントはD7のものですが、 D6)。このようなもの(試されていない):

_function your_access_callback($uid_viewed) {
  global $user;
  $params = array('between' => array($user->uid, $uid_viewed));
  return (bool) user_relationships_load($params, array('count' => TRUE));
}
_

それはあなたの4つのケースで機能させるにはすでに十分なはずです。ただし、これは一般的にURの興味深い改善のように聞こえます。このため、2つの追加のものが必要になります。

c)ユーザーIDである引数を構成できるようにします。 (たとえば、ビューがブロックとして表示されている場合など)たぶん他の方法があるかもしれません。それを行う方法がわかりません。

d)チェックする関係タイプを設定できます。オプションのフォーム要素を公開し、選択した関係タイプIDをアクセスコールバックに渡し、そこでuser_relationships_load()に渡します。

7
Berdir

Views Access CallbackPrivacy Per User モジュールと一緒に使用すると、クリーンで簡単に動作するはずです。

実装例:

function mymodule_views_access_callbacks() {
  return array(
    'mymodule_user_has_access' => t("Check user privacy policy "),
  );
}

// Callback function to determine if a view has access according to the user's privacy polocay.
function mymodule_check_user_privacy_policy($arg1 = NULL) {
  switch (arg(2)) {
    case 'blog':
      if (!privacypu_check_access($arg1,'post_blog_article'))
        return FALSE;
      break;
    case 'friends':
      if (!privacypu_check_access($arg1,'becomefriend'))
        return FALSE;
      break;
  }
  return user_access('access content');
}

唯一の問題は、my Drupal 7サイトの場合、ビューアクセスコールバックモジュールにある種の 奇妙な致命的なエラー 私のマルチディスプレイビューがある場合 推奨パッチ 機能しません。修正方法はありますか?

0
Druvision