PHP-使用SESSION的权限问题

时间:2019-04-18 09:48:22

标签: php

首先,我是新手,请耐心等待。

所以我的数据库中有不同的角色,例如adminsaf,如果登录的人是管理员,我希望他们看到所有内容,但是如果登录的人是安全的,我只希望他们来查看DashboardSAF

如果您需要任何其他代码,我可以提供,但是我认为这已经足够了吗?

database

<?php 
session_start(); 

$ligaBD=mysqli_connect("localhost","root","","pap"); 

if (!isset($_SESSION['loggedin'])) { 
    header('Location: login.html'); 
    exit(); 
} 

if (!isset($_SESSION['role']) || ($_SESSION['role'] != 'admin')) { 

?>
<ul class="nav navbar-nav">
    <li class="active"><a href="admin.php">Dashboard</a></li>

    <li><a href="biblioteca.php">Biblioteca</a></li>
    <li><a href="conselhoadmin.php">Conselho Administrativo</a></li>
    <li><a href="saf.php">SAF</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
    <li><a href="#">Bem-vindo, admin <?=$_SESSION['name']?></a></li>
    <li>
        <a href="https:a"><img src="./images/mail.png" alt="la" height="13" width="20" /></a>
    </li>
    <li><a href="./logout.php">Logout</a></li>
</ul>

<?php

}else if (!isset($_SESSION['role']) || ($_SESSION['role'] != 'saf')) {
?>

    <ul class="nav navbar-nav">
        <li class="active"><a href="admin.php">Dashboard</a></li>
        <li><a href="saf.php">SAF</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Bem-vindo, saf @login</a></li>
        <li>
            <a href="https:a/"><img src="./images/mail.png" alt="la" height="13" width="20" /></a>
        </li>
        <li><a href="./login.html">Logout</a></li>
    </ul>

<?php
    mysqli_close($ligaBD);
?>

此代码对我造成的影响是,当我以SAF用户身份登录时,仍然可以看到管理功能。

如果您能帮助我,我将不胜感激。谢谢

3 个答案:

答案 0 :(得分:2)

您正在弄乱if条件。

第一个if条件应为:

if (isset($_SESSION['role']) && ($_SESSION['role'] == 'admin')) {
 // Show admin role links.

第二个if条件应该是:

if (isset($_SESSION['role']) && ($_SESSION['role'] != 'admin')) { 
 // Show admin Non-admin/saf role links.

答案 1 :(得分:1)

您需要整理if语句。他们中的许多人在检查两个条件时才真正需要检查一个。

如果选择太多,也可以用switch语句代替if语句。

下面的简化代码将向管理员标记的$_SESSION变量显示管理员详细信息,并向SAF标记变量显示SAF详细信息。

最好使用严格的比较工具===。检查正匹配项不是负匹配项(请查找===而不是!==)。

  

请注意,参数列表与原始代码的顺序不同。

/***
 * I would suggest using the below line to avoid error report NOTICES.
 * Setting an unset value to false also fits the later test of empty()
 ***/
if(!isset($_SESSION['role'])){
    $_SESSION['role'] = false;
}


if ($_SESSION['role'] === 'admin') { 

?>
Admin Dashboard HTML

<?php

}
elseif ($_SESSION['role'] === 'saf'){
?>

     SAF Dashboard HTML

<?php
}
elseif (!empty($_SESSION['role']) ) {
 ?>
   Some other authentication level dashboard (optional). 
<?php
}
 mysqli_close($ligaBD);
?>

答案 2 :(得分:0)

如果要向所有用户显示仪表板和安全性,则可以使用以下条件:

if (isset($_SESSION['role']) && ($_SESSION['role'] != 'admin')) {
     // Show Dashboard and saf and other links to all users.
     <ul class="nav navbar-nav">
        <li class="active"><a href="admin.php">Dashboard</a></li>
        <li><a href="saf.php">SAF</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Bem-vindo, saf @login</a></li>
        <li>
            <a href="https:a/"><img src="./images/mail.png" alt="la" height="13" width="20" /></a>
        </li>
        <li><a href="./login.html">Logout</a></li>
    </ul>

}else{
    // Show All links admin users.
    <ul class="nav navbar-nav">
        <li class="active"><a href="admin.php">Dashboard</a></li>
        <li><a href="biblioteca.php">Biblioteca</a></li>
        <li><a href="conselhoadmin.php">Conselho Administrativo</a></li>
        <li><a href="saf.php">SAF</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
       <li><a href="#">Bem-vindo, admin <?=$_SESSION['name']?></a></li>
       <li>
           <a href="https:a"><img src="./images/mail.png" alt="la" height="13" width="20" /></a>
       </li>
       <li><a href="./logout.php">Logout</a></li>
    </ul>

}