web-dev-qa-db-fra.com

Restreindre l'accès au contenu

Je développe une fonctionnalité qui permet aux clients et aux médecins d’avoir accès aux résultats des examens. Mais je ne suis pas sûr de la force de mon code pour assurer la visibilité uniquement aux personnes autorisées.

J’ai eu jusqu’à créer le type de message "examen" pour gérer les informations et ajouter le métabox pour enregistrer les informations relatives au médecin et au patient à chaque examen (le médecin et le patient sont également des rôles personnalisés pour les utilisateurs, avec des fonctionnalités similaires à celles des abonnés).

alors j'ai créé cette fonction pour vérifier si l'utilisateur essayant de voir le contenu y a droit:

/*
 * 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
  }

et maintenant je l'appelle sur mon fichier single-exam.php en tant que

        <?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; ?>

Comment ça vous ressemble? Est-ce que je vais bien ici ou devrais-je essayer une autre méthode?

2
moraleida

Le moyen le plus simple consiste à utiliser if ( current_user_can( 'capability' ) ) // do stuff. Vous trouverez plus d'informations sur les fonctionnalités du codex. Vous pouvez également inspecter les données qu'un utilisateur a associées avec var_dump() normal et autres. J'ai aussi un très vieux plugin pour ça. Mais je ne suis pas sûr que cela fonctionne toujours avec la version actuelle de WP. Si tel est le cas, vous aurez accès à toutes les données utilisateur et à quelques conseils et extraits sur une nouvelle page d’administrateur.

2
kaiser