一个用foreach实现的2层权限代码

浏览:528 发布日期:2013/10/16 分类:心情闲聊 关键字: 权限分配非递归
<?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;
    }
}

?>
最佳答案
评论( 相关
后面还有条评论,点击查看>>