2017-10-01 4 views
0

私にはアクセス権のあるページがあります。 ユーザーは'amministratore'ユーザーしかアクセスできません。'dipendente'ユーザーにも同じ権限を与えたいと思います。私は、ページにアクセスできるようにするには'dipendente'ユーザーもしたいが、私は論理演算を追加した場合、それは動作しないようです論理演算子を使用したif文の中のPHP関数

function userHasRole($role) { 
    include 'db.inc.php'; 
    try 
    { 
     $sql = "SELECT COUNT(*) FROM utenti 
      INNER JOIN utentiruoli ON utenti.id = utenteid 
      INNER JOIN ruoli ON ruoloid = ruoli.id 
      WHERE mail = :mail AND ruoli.id = :ruoloid"; 
     $s = $pdo->prepare($sql); 
     $s->bindValue(':mail', $_SESSION['mail']); 
     $s->bindValue(':ruoloid', $role); 
     $s->execute(); 
    } catch (PDOException $e) { 
     $error = 'Errore nella ricarca del ruolo utente.'; 
     include 'error.html.php'; 
     exit(); 
    } 

    $row = $s->fetch(); 

    if ($row[0] > 0) { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 
} 
exit(); 
} 

if(!userHasRole('amministratore')){ 
    $error = 'Solo gli utenti registrati possono accedere a quest\'area'; 
    include '../accessonegato.html.php'; 
    exit(); 
} 

:ここ

は、コントローラの作業コードである

if(!userHasRole('amministratore') || !userHasRole('dipendente')){ 
    $error = 'Solo gli utenti registrati possono accedere a quest\'area'; 
    include '../accessonegato.html.php'; 
    exit(); 
} 

誰かが私が間違っていることを教えてもらえますか?

+1

私は、それはそれは今働いている '&&'条件ではなく、 '||' – Panther

答えて

0

あなたは文のロジックは、今それがある場合に変更する必要があります!

((userHasRole( 'amministratore')|| userHasRole( 'dipendenteを'))

それは次のようになります。

(!(userHasRole( 'amministratore')|| userHasRole( 'dipendente'))

0

代わりの

if (!userHasRole('amministratore') || !userHasRole('dipendente')) { 

使用

if (!(userHasRole('amministratore') || userHasRole('dipendente'))) { 

それは、基本的には、1つの役割を確認し、今あなたは2をやっているのと同じです。

+0

する必要があります願っています。ありがとうございました他の方法で2つの役割を確認することはできませんか? –

+0

はい、私はc権限のないロールが存在する場合は保護されたコンテンツを表示し、そうでない場合はアクセスできないメッセージを表示します。ややシンプルで安全です。あるいは 'userHasRole()'関数を 'userHasOneOfTheseRoles()'に変更することもできます。 –

+0

申し訳ありませんが私は非常によく理解していません。このコードでは、ユーザーがamministratoreロールまたはdipendenteを持っているかどうかを確認する必要があります。if(!userHasRole( 'amministratore')||!userHasRole( 'dipendente'))....なぜこのようなif文は機能しませんか? –

1

あなたがしたいことは、「ユーザーが管理者でもディペンダントでもない場合」というエラーを表示することです。これはif(!(userHasRole('amministratore') || userHasRole('dipendente'))と書くことができます。 De Morganの法律に基づいて否定を配布する場合は、if(!userHasRole('amministratore') && !userHasRole('dipendente'))と書き直すことができます。

否定を配布するたびに、&&から||へ、またはその逆に切り替わります。

関連する問題