簡體   English   中英

檢查用戶是否在會話中具有角色(PHP)

[英]Check if the user has role in sessions (PHP)

對於一個學校項目,我正在尋找是否可以從 session 獲取用戶角色(我有一個角色 ID,但僅當用戶具有正確的角色 ID 時才需要顯示數據)。

這是我的代碼,但不知何故,只有第一個“if”語句有效......

<!-- check what role the user has and show data specifically for that user -->
    <?php 
        if(isset($_SESSION['userRole']) == 1){
            echo "<h3 class='dashboard-welcome'>Welkom " . $_SESSION["userRole"] . "</h3> "; 
            echo "<p>Jouw rol is Algemene Medewerker </p>";
        } 
        else if(isset($_SESSION['userRole'] )  == 2){
            echo "<h3 class='dashboard-welcome'>Welkom " . $_SESSION["userName"] . "</h3>";
            echo "<p>Jouw rol is Medewerker Inname</h3><p>";
        } 
        else if(isset($_SESSION['userRole']) == 3){
            echo "<h3 class='dashboard-welcome'>Welkom " . $_SESSION["userName"] . "</h3>";
            echo "<p>Jouw rol is Medewerker Verwerking</p>";
        } 
        else if(isset($_SESSION['userRole'])  == 4){
            echo "<h3 class='dashboard-welcome'>Welkom " . $_SESSION["userName"] . "</h3>";
            echo "<p>Jouw rol is Medewerker Uitgifte</p>";
        } 
        else if(isset($_SESSION['userRole']) == 5){
            echo "<h3 class='dashboard-welcome'>Welkom " . $_SESSION["userName"] . "</h3>";
            echo "<p>Jouw rol is Applicatie Beheerder</p>";
        } 
        else if(isset($_SESSION['userRole']) == 6){
            echo "<h3 class='dashboard-welcome'>Welkom " . $_SESSION["userName"] . "</h3>";
            echo "<p>Jouw rol is Administrator</p>";
        }
        else {
           echo "<p>you are logged out</p>";
        } 
        
    ?>

除了之前關於isset的評論 - function 返回boolean因此您可以測試真實值,但不等於上面所做的特定值。 isset將采用單個或多個值- "If multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set. Evaluation goes from left to right and stops as soon as an unset variable is encountered"

上面的代碼中似乎有一些重復(更不用說isset的錯誤使用了——我很想像這樣重寫它:

<?php 

    if( isset( $_SESSION['userRole'], $_SESSION["userName"] ) ){
        switch( (int)$_SESSION['userRole'] ){
            case 1:$message='Jouw rol is Algemene Medewerker'; break;
            case 2:$message='Jouw rol is Medewerker Inname'; break;
            case 3:$message='Jouw rol is Medewerker Verwerking';break;
            case 4:$message='Jouw rol is Medewerker Uitgifte';break;
            case 5:$message='Jouw rol is Applicatie Beheerder';break;
            case 6:$message='Jouw rol is Administrator';break;
        }
        
        
        printf('
            <h3 class="dashboard-welcome">Welkom %s</h3>
            <p>%s<p>',
            $_SESSION["userName"],
            $message
        );
    }else{
        echo "<p>you are logged out</p>";
    }
?>

使用數組lookup角色的替代方法

    if( isset( $_SESSION['userRole'], $_SESSION['userName'] ) ){
    
        $i=(int)$_SESSION['userRole'];
        
        $roles=array(
            1=>'Algemene Medewerker',
            2=>'Medewerker Inname',
            3=>'Medewerker Verwerking',
            4=>'Medewerker Uitgifte',
            5=>'Applicatie Beheerder',
            6=>'Administrator'
        );
        
        printf('
            <h3 class="dashboard-welcome">Welkom %s</h3>
            <p>Jouw rol is %s<p>',
            $_SESSION["userName"],
            $roles[$i]
        );
    }else{
        echo "<p>you are logged out</p>";
    }

我認為>Welkom ". $_SESSION["userRole"]. "是一個錯誤,並且在第二條邏輯中有一個雜散的</h3>標記(之后: isset($_SESSION['userRole'] ) == 2 )

您有 2 個解決方案:

  1. 創建用戶角色表:
$users_roles = array(
1 => "Algemene Medewerker",
2 => "Medewerker Inname",
3 => "Medewerker Verwerking",
4 => "Medewerker Uitgifte",
5 => "Applicatie Beheerder",
6 => "Administrator"
);

然后直接使用

<?php 
if(isset($_SESSION['userRole'])) {
    echo "<h3 class='dashboard-welcome'>Welkom " . $_SESSION["userName"] . "</h3>";
    echo "<p>Jouw rol " .  $users_roles[$_SESSION['userRole']] . "</p>";
}
?>
  1. 修改$_SESSION['userRole']以設置實際值(“Algemene Medewerker”、“Medewerker Inname”...)而不是 integer

你可以和運營商這樣;

if(isset($_SESSION['userRole']) and $_SESSION['userRole']== 1){
        echo "<h3 class='dashboard-welcome'>Welkom " . $_SESSION["userRole"] . "</h3> "; 
        echo "<p>Jouw rol is Algemene Medewerker </p>";
    }
...

如果 session 不存在, isset function 會避免警告

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM