web-dev-qa-db-ja.com

コンテンツへのアクセスを制限する

私は、顧客と医師だけが試験結果にアクセスできるようにする機能を開発しています。しかし、権限を与えられた人だけに視野を確保するという私のコードの強さについては、私はよくわかりません。

私はこれまでのところ、情報を処理するための「試験」投稿タイプを作成し、すべての試験で医師と患者の情報を保存するメタボックスを追加しました(医師と患者も購読者に似た機能を持つカスタムロールです)。

それから私はコンテンツを見ようとしているユーザーがそれに権利があるかどうかチェックするためにこの機能を作成しました:

/*
 * Checks if user is logged in and has access to that specific exam
 */
function rm_userauth_check() {
    global $current_user;
      get_currentuserinfo();
      $doctor = get_post_custom_values('doctor');
      $patient = get_post_custom_values('patient');
      $loggeduser = $current_user->user_login;
      $nicename = $current_user->display_name;
      $mainrole = $current_user->roles;

  if ($current_user->data !== null) {

      if ($mainrole[0] == 'doctor' && $loggeduser == $doctor[0]) {
          return true; // this user is a doctor and is assigned to this exam
      } elseif ($mainrole[0] == 'patient' && $loggeduser == $patient[0]) {
          return true; // this user is a patient and is assigned to this exam
      } else {
          return false; // this user is not assigned to this exam
      }
  } else {
      return false; // user is not logged in
  }

そして今私は私のsingle-exam.phpファイルでそれを呼び出しています

        <?php if (function_exists('rm_userauth_check')) : ?>

        <?php if (rm_userauth_check()) : ?>

        <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

            <?php get_template_part( 'content', 'single' ); ?>

        <?php endwhile; // end of the loop. ?>
           <?php else : ?>
                       <?php wp_redirect( home_url() ); exit; ?>
           <?php endif; ?>
    <?php endif; ?>

それはあなたにどのように見えますか?私はここで正しいやり方をしているのですか、それとも別の方法を試すべきですか?

2
moraleida

最も簡単な方法はif ( current_user_can( 'capability' ) ) // do stuffを使うことです。機能についての詳細はコーデックスにあります。あるユーザーが添付したデータを通常のvar_dump()などで調べることもできます。そのために、かなり古い プラグイン もあります。しかし、それが現在のWPバージョンでまだ動作するかどうかはわかりません。もしそうなら、あなたはすべてのユーザーデータの近くに表示され、いくつかのヒントと新しい管理ページ上のスニペットが表示されます。

2
kaiser