2016-03-28 53 views
0

我在一個小CMS工作項目我的數據庫字段說明如下PHP用戶組級別

水平表

CREATE TABLE IF NOT EXISTS `security_level` (
    `user_level` int(10) NOT NULL, 
    `level_title` varchar(30) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

VALUES 
1, User 
2, Moderator 
3, Administrator 

用戶表

CREATE TABLE IF NOT EXISTS `users` (
    `uid` int(11) unsigned NOT NULL, 
    `username` varchar(25) NOT NULL, 
    `user_email` varchar(255) NOT NULL, 
    `password` text, 
    `security_level` int(11) NOT NULL DEFAULT '1', 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

我所試圖做的是創建一個函數,我可以包含在我的會員區頁面上,所以如果level_id爲1但頁面需要level_id 2,它將會簡單地重定向它們,默認情況下級別設置爲1 ...

我使用這個以確保他們登錄或重定向

<?php 

if (logged_in()) {} else { 

    redirect("login.php"); 
} 
?> 

,但我想限制訪問基於level_id

+0

您是否正在使用會話來存儲登錄時的安全級別? – Maximus2012

+0

Maximus2012是sir – Amaru

+0

如何定義'logged_in'函數? – Hubbitus

回答

0

一個簡單的方法來做到這一點會是這樣的某些頁面喜歡這個。下面的函數返回true或false,並且需要兩個參數:$page_level$user_level

function user_has_permissions($user_level, $page_level) 
{ 
    // a user can access page less than or equal to their level 
    if ((int)$user_level >= (int)$page_level) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

我打電話這個功能,因爲用戶可能在登錄user_has_permissions(),而不是logged_in(),但他們可能沒有權限屬於一個頁面到不同的水平。

然後在頁面上,爲了使用這個功能。

$page_level = "2"; // define page level on each page 
// get the user level from sessions 
if (!user_has_permissions($_SESSION['user_level'], $page_level)) 
{ 
    header ("Location: login.php"); 
    exit; 
} 
// code after successful permissions checking goes here 

這是一個簡單的實現,但您可能正在尋找諸如訪問控制列表(ACL)之類的東西。