如何阻止比较来自2个表的数据的链接

时间:2015-01-23 18:36:15

标签: php mysql css block href

我只是想做到这一点,但我甚至不知道该怎么做,在这种情况下: 我有3张桌子

**

  • admin_users,admin_permissions& admin_modules

**

我通过" iduser"通过访问页面,我从表格中生成了一种菜单" admin_modules" ... 现在我想要删除用户没有访问权限的链接...... 我认为我可以通过CSS来实现,但我不知道我的菜单生成器在哪个位置"我必须放置代码才能做到...... *

include ("connector.php");
$con = conectar();
$tbl = "admin_modules";
$i=0;
$query = "SELECT * FROM $tbl";
$resultado = mysqli_query($con,$query) or die(mysqli_error());  
while($dato=mysqli_fetch_array($resultado)){
    echo "<td width='25%'><a href=../" . 
        $dato['RootDirectory']  . "/" . $dato['InitialMenu'] . "><img src=./images/icons/" . 
        $dato['IconName'] . "></a><p>" . $dato['ModuleName'] . "</p></td>";

    $i=$i+1;
    if ($i==4) {
        echo"</tr>";
        echo"<tr>";
        $i=0;
    }

}
mysqli_close($con);//cerrar conexion

额外信息:

在admin_permissions上我有两列&#34; idadmin_users [FK]&#34;和&#34; idadmin_module [FK]&#34;因此,如果用户在该表上有注册表,则他可以访问该模块。

示例:

用户John可以访问拒绝模块和发票模块... 因此,他在admin_permissions中有2个条目,其中包含唯一的用户ID和每个唯一的模块ID

2 个答案:

答案 0 :(得分:1)

首先,您需要一个额外的查询来获取该用户可以访问的模块列表。然后,您可以在现有循环中使用该信息:

include ("connector.php");
$con = conectar();

// Get permissions
$perms = array();
$result1 = mysqli_query($con, "SELECT * FROM admin_permissions WHERE idadmin_users = $_GET['iduser']");
while ($row = mysqli_fetch_array($result1)) {
    $perms[] = $row['idadmin_module'];
}

// Get modules and loop
$i = 0;
$result2 = mysqli_query($con, "SELECT * FROM admin_modules") or die(mysqli_error());
while($dato = mysqli_fetch_array($result2)){
    echo '<td width="25%">';

    // Only echo the <a> tags if user has permission
    // I'm assuming the $dato row has an 'id'
    // that matches admin_permissions.idadmin_module
    if (in_array($dato['id'], $perms)
        echo '<a href="../' . $dato['RootDirectory']  . '/' . $dato['InitialMenu'] . '">';

    echo '<img src="./images/icons/' . $dato['IconName'] . '">';

    // Only echo the <a> tags if user has permission
    if (in_array($dato['id'], $perms))
        echo '</a>';

    echo '<p>' . $dato['ModuleName'] . '</p></td>';

    $i++;
    if ($i == 4) {
        echo '</tr>';
        echo '<tr>';
        $i=0;
    }
}

mysqli_close($con); // cerrar conexion

重要:

在此查询中使用GET参数是一个主要漏洞:

SELECT * FROM admin_permissions WHERE idadmin_users = $_GET['iduser']

使用mysqli的parameterized queries会更好,但这也可能涉及对connector.php的更改(在撰写本文时我无法看到)。因此,使用此答案的主要概念来获取您的目标,然后更新您的查询以使其更安全。

答案 1 :(得分:0)

我认为你可能会倒退。而不是禁用人们无权访问的链接,为什么不使用查询来生成适当的链接。此外,您还需要小心地通过get变量传递用户,有人可以很容易地更改它。