限制访问受限用户的PHP脚本

时间:2011-04-02 17:58:44

标签: php permissions

我有一个php站点,它有多个php脚本。我需要从另一个站点向用户提供有限访问权限的用户。我想限制这些ppl可以访问的页面。

我是按照以下方式做的:

// $_SESSION['systemid'] is set with a value of say, '1'
$permissionArray = $objACCESS->getPermissions($_SESSION['systemid']);

// getPermissions returns an array like the following (for that systemid):
// 0 => {'systemid' => '1', 'permission_type' => 'createcontent' }
// 1 => {'systemid' => '1', 'permission_type' => 'invitecontacts' }

// the following contain a list of script names that should be 
// restricted if permission is not allowed
$createcontent = array('createcontent.php');
$managecontent = array('managecontent.php');
$invitecontacts = array('invitecontacts.php');

$page_name=basename($_SERVER["SCRIPT_FILENAME"]);

if(is_array($permissionarray))
{
    $haspermissions = false;
    foreach($permissionarray as $permissions)
    {
        if(in_array($page_name,${"$permissions[permission_type]"}))
        {
            $haspermissions  = true;
            break;
        }
    }
}

if($haspermissions==false)
{
    // - do not have permissions
    echo "<meta http-equiv=\"refresh\" content=\"0;url=".$site_url."404.php\">";
    die;
}

...
// rest of the code
...

Q1:有更好的方法来限制用户访问吗?

Q2:如果没有,是否有办法使这种方法更有效/最佳?

1 个答案:

答案 0 :(得分:0)

这里的基础认证机制对我没有意义。 $ _SESSION ['systemid']是如何设置的?什么是“系统”?

无论如何,我会假设你已经解决了这部分问题。因此,我将按照以下内容编辑您的内容:

首先,调整getPermissions以返回类似的内容:

$perms = array(
    'createcontact'  => 1,
    'invitecontacts' => 1
);

此数组只会填充与该“系统”相关联的权限。

然后,检查当前“系统”是否具有页面所需的权限,如下所示:

$cur_page_perm_key = basename($_SERVER['SCRIPT_FILENAME'], '.php');
$has_permission = isset($perms[$cur_page_perm_key]);
if(!$has_permission) {
    // No permission? Redirect to an unauthorized page
    header('HTTP/1.0 401 Not Authorized');
    header('Status: 401 Not Authorized');
    header('Location: /unauthorized.php');
    exit;
}

简单的“isset”检查比循环更快,特别是如果权限/页面数量增加。

希望这有帮助。