我目前有一个数组,用于保存用户可以执行的信息。我目前在下拉菜单中使用了一个这样的实例,非常好。我现在想要做的只是包含特定项目,如果他们有权访问它。因此,如果$ 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")
);
答案 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" }