我有一个权限有限的页面。
只有'amministratore'
个用户可以访问它,我希望向'dipendente'
个用户授予相同的权限。
以下是控制器的工作代码:
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();
}
我还希望'dipendente'
用户能够访问该页面,但如果我添加逻辑操作,它似乎无法工作:
if(!userHasRole('amministratore') || !userHasRole('dipendente')){
$error = 'Solo gli utenti registrati possono accedere a quest\'area';
include '../accessonegato.html.php';
exit();
}
有人能告诉我我做错了吗?
答案 0 :(得分:1)
您要做的是提供错误“如果用户不是amministratore或dipendente”。这可以写成if(!(userHasRole('amministratore') || userHasRole('dipendente'))
。如果我们根据De Morgan定律分配否定,可以将其重写为if(!userHasRole('amministratore') && !userHasRole('dipendente'))
。
每当您分发否定时,您都会从&&
切换到||
,反之亦然。
答案 1 :(得分:0)
而不是
if (!userHasRole('amministratore') || !userHasRole('dipendente')) {
使用
if (!(userHasRole('amministratore') || userHasRole('dipendente'))) {
它与检查一个角色基本相同,但现在你正在做两个角色。
答案 2 :(得分:0)
您必须更改if语句逻辑,现在它是:
((!userHasRole('amministratore')||!userHasRole('dipendente'))
它应该是:
(!(userHasRole('amministratore')|| userHasRole('dipendente'))