向数组添加了更多数据

时间:2012-03-11 04:03:51

标签: php arrays object

我目前有一个数组,用于保存用户可以执行的信息。我目前在下拉菜单中使用了一个这样的实例,非常好。我现在想要做的只是包含特定项目,如果他们有权访问它。因此,如果$ user_access = 2,那么他们可以执行Download-> small_image但不能执行Download-> large_image。我希望能够为数组中的每个项目分配默认访问权限...甚至是密钥。所以我可以说用户访问权限是0,所以他们根本不应该显示“下载”。

我想可能会将每个访问整数放在一个对象中。所以$ access-> download-> small_image = 2;如果访问级别大于或等于它,我可以逐个检查并将其添加到数组中?我实际上不确定如何进行循环并正确构建数组。另一种方式......也许以某种方式将访问值放在实际数组中?任何想法都会很棒。

$var = array("Download" =>                                                
                   array("small_image" => "ajax_load",                         
                         "large_image" => "/master.php"),                       
                   "Page" =>                                                    
                   array("Edit" => "edit.php",                                  
                         "View" => "view.php",                                  
                         "Stuff" => "stuff.php")                                
                   );      

1 个答案:

答案 0 :(得分:0)

访问控制总是一个模糊的问题,因为有无限量的选项。听起来你会对访问数组感到高兴,IE:

array(
    0 => "root",
    10 => "Group1",
    20 => "Group2"
);

我可能也会为您的ACL(访问控制列表)使用数组:

$ACL = array(
    "Download" => array(
        "Small_Image" => 10,
        "Large_Image" => 20
    ),
    "Page" => array(
        "Edit" => 0,
        "View" => 10
    )
);

然后调用一个函数进行授权:

function checkACL($option, $arg, $lvl)
{
    if( $ACL[$option][$arg] >= $lvl )
        return true;
    else
        return false;
};

$userLevel = 10;
if( checkACL("Page", "Edit", $userLevel) ) {
    /*
     * Display Edit page here.
     */
} else {
    /*
     * Display "Not authorized" or redirect to a different page.
     */
}

抱歉,希望不要过多论话 但您可以调整它以显示您的菜单。我假设您已经有一个粗略的登录系统:)

if( checkACL("Download", "Small_Image", $userLevel) ) 
    echo '<a href="'.$var['Download']['Small_Image'].'">Small Image</a>';

编辑:

$var = array(
    "download.small_image" => array(
        "id"    => 1001,
        "file"  => "/img/blue.png",
        "width" => "100px",
        "height"=> "100px",
        "accessLevel"=> 20
    ),
    "page.listUsers" => array(
        "id"   => 1011,
        "file" => "/pages/list.php",
        "accessLevel" => 10
    )
);

因此它的工作原理相同,但所有信息都是集中的 如果我不使用数据库,我会怎么做才将它存储为json文件 你不想将它硬编码到php文件中,你希望它很容易修改。

// This will load your permissions into $var
$var = json_decode(file_get_contents("/acl.json"));

// If you design a page to modify permissions, you can save the file with this.
file_put_contents("/acl.json", json_encode($var));

// json is simple, it's basically just { "key" : "val" }