<?php
class Rbac {
/**
*
* @param unknown $power
* @param string $access
* @return multitype:array
* 仅仅可以递归调用2层权限的。
*/
public function author($power, $access = null) {
$arr = array ();///中间变量,记录所有 孩子
$au = array ();///中间变量,记录组合之后的父子
$parent = array ();///中间变量,记录 所有父亲
$result = array ();///中间变量,记录 最后结果
$childs = array (); // /中间变量,记录 组合之中的 对应父亲下边的 所有孩子
/**
* 查找所有孩子,有权限标记 access为1,否则为0
*/
foreach ( $power as $v ) {
if ($v ['pid'] != 0) {
if (is_array ( $access )) {
foreach ( $access as $val ) {
if ($v ['id'] == $val) {
$v ['access'] = 1;
break; ///有权限 就结束当前循环
}
else {
$v ['access'] = 0;
}
}
}
else {
$v ['access'] = 0;
}
$arr [] = $v;
}
}
/**
* 查找所有父亲,并将父亲的access记录为 -1 ,来表示不可点击
*/
foreach ( $power as $v ) {
if ($v ['pid'] == 0) {
$v ['access'] = - 1;
$parent [] = $v;
}
}
$midd = - 1;
static $num;
/**
* 查找所有父子关系
*/
if (is_array ( $parent )) {
foreach ( $parent as $v ) {
foreach ( $arr as $val ) {
if (($v ['id'] == $val ['pid']) && ($v ['id'] != $midd)) {
$childs [] = $val;
$midd = $v ['id'];
$num = 0;
} else if (($v ['id'] == $val ['pid']) && ($v ['id'] == $midd)) {
$childs [] = $val;
}
}
$temp=array();
$temp['child']=$childs;
$au [$num] = array_merge ( $v, $temp);
$result = array_merge ( $result, $au );
$num ++;
$midd = - 1;
$childs = null;
$temp=null;
}
}
return $result;
}
}
?> 最佳答案