YPHP后台中RBAC实现整理(节点篇)


上一篇: YPHP后台中RBAC实现整理(数据库设计篇)

现在开始实现其中关于节点部分的实现吧,尽量整理到细节。


添加节点

节点的话,有区分一级节点和子节点。一级节点有icon,且pid=0。

1


递归遍历节点

将数据库node表中的节点全部取出,并根据其id和pid关系使用递归方法遍历成树形的数组结构。

先看下演示的node数据吧!

初始数据

为了演示,特意将用户管理的pid改为3,其实应该是1的。

分享我递归遍历node的方法,代码是放在系统管理的模型model中的:

/**
 * 将节点数组递归遍历成树
 * @param  array   $node_list 所有节点数组
 * @param  integer $pid       父节点id
 * @return array   $nodes     节点树
 */
public function nodeToTree($node_list,$pid=0){
	$nodes = $tmp_arr = [];
	foreach ($node_list as $k => $v) {
		if($v['pid']==$pid){
			$tmp_arr = $this->nodeToTree($node_list, $v['id']);
			if($tmp_arr) $v['son'] = $tmp_arr;
	   		$nodes[] = $v;
	   		unset($node_list[$k]);
		}
	}
	return $nodes;
}

核心还是找出规律,这里以pid为核心,注意理解函数开始时创建的两个空数组吧。关于递归,更多需要自己后续学习。。

遍历结果:

20170707091916


显示并添加节点增删改功能

访问系统管理下的节点管理,显示节点树。

20170711105707

这里添加的每一个节点,就是权限设置的单元。

至于左侧的导航栏也会从节点表里取is_nav=1的数据根据当前角色的权限生成导航栏,中间考虑加入缓存或者使用iframe,避免多次查询数据库和构造导航栏。

导航栏的状态也是一个问题,思路是给导航栏上的节点li加标识,通过当前act和op,使用js改变状态。

节点树的样式和js参考这里: bootstrap tree , 自己改改吧,然后就是点击节点,在其后跟上增删改的操作按钮。

我的方法:

对节点$nodes 进行一层foreach循环,循环调用 createNodeHtml 方法,当然整个字符串变量html是引用传递,就好比很多小树排队一样。

1


节点树缓存

上面的一顿操作,针对使用整张节点表取数据,递归,循环等生成的节点树,如果每次请求都要生成的话,感觉很浪费性能。而且不单单节点管理的时候要用到,在给角色附加权限的时候,也要可视化的选择节点,也要用到节点树。所以我的做法是给节点树加缓存。

1

然后对应的在节点增删改成功后,都要跟上 Cache::del('nodeTree');//删除节点树缓存 nodeTree


最后

未完待续。。。下一篇 角色篇


php mysql YPHP


上一篇:phpexcel的自动加载与其他框架有冲突

js变量的声明和作用域关系:下一篇