[英]Multi level login page redirect users to different pages based on user role 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.