簡體   English   中英

基於用戶角色的動態php頁面

[英]Dynamic php pages based on user role

我在數據庫設計上走過了一條路,並認為它存在缺陷,但是希望有人可以提供幫助,因為我已經很深入了。

表格:

**users**
user_id  | user_email      | user_role | dashboard_id
1        | admin@admin.com | 0         | 1
2        | user@user.com   | 1         | 2
---------------------------------------------------

**dashboards**
dashboard_id | dashboard_name | 
1            | dashboard 1
2            | dashboard 2
---------------------------------------------------

**roles**
role_id | role_name | 
0       | super_admin
1       | user
---------------------------------------------------

超級管理員:他們登錄后會進入頂層頁面,可以在其中創建新的儀表板。

用戶:可以登錄並轉到與其關聯的儀表板。

超級管理員:能夠單擊儀表板並查看該儀表板,但是如您所見,它們也已綁定到儀表板。

現在,我通過獲取會話中的用戶ID並從users表中的dashboard_id中獲取值並進行匹配來在儀表板上顯示信息,如下所示:

function clientReportName() {
global $conn;
global $dashboardIdNew;
global $user_dash_id;

    $sql = "SELECT * FROM dashboards WHERE dashboard_id = $user_dash_id";
    $result = $conn->query($sql);

    if($result->num_rows > 0){
        while($row = $result->fetch_assoc()){
            echo $row["dashboard_name"];        
        }
    }
}

上面的操作是給我它們所關聯的儀表板的標題。

我的問題是如何保留頂層儀表板,並允許超級管理員查看任何儀表板,並使用戶也只能查看/訪問與其關聯的儀表板。

在函數的開頭添加一個檢查,以檢查是否為dashboard_id設置了GET參數。

如果是,請檢查該用戶是否為super_admin ,並且所請求的儀表板存在。

如果也是如此,則將$user_dash_id設置$user_dash_id所請求的id的值,而不是從數據庫中獲取它。

顯然,您將需要添加鏈接,以便管理員可以從列表或其他內容中選擇並選擇他們喜歡的儀表板。

例:

<?php
function clientReportName()
{
    global $conn;
    global $user_id; //you'll need to provide the user_id
    global $user_dash_id;

    if(isset($_GET['dashboard_id']) && is_numeric($_GET['dashboard_id'])){

        $sql = "SELECT * FROM `users` WHERE `user_id` = $user_id AND `user_role` = 0";
        $result = $conn->query($sql);

        if($result->num_rows > 0){
            //they are super_admin

            $dash_id = mysqli_real_escape_string($conn, $_GET['dashboard_id']); //this is probably inadequate to protect you from SQL injection

            $sql = "SELECT * FROM `dashboards` WHERE `dashboard_id` = $dash_id";
            $result = $conn->query($sql);

            if($result->num_rows > 0){
                //The requested dashboard exists, so set it as the new id to be requested
                $user_dash_id = $dash_id;
            }
        }
    }

    $sql = "SELECT * FROM dashboards WHERE dashboard_id = $user_dash_id";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            echo $row["dashboard_name"];
        }
    }
}

這可能需要一些重構,但是我認為它表明了這個想法。

暫無
暫無

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

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