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


额,因为工作比较忙,所以这个YPHP后台的RBAC是断断续续完成的,现在是从头梳理下我的实现过程和一些想法。

主线: 每个用户都有1个角色,左侧导航只显示符合该角色的内容,并且不能访问没有权限的节点。(前提是该节点被加入了节点管理)

其实我已经做完蛮久的了,现在开始梳理下过程。首先开始的整理思路和数据库的设计。


节点

首先明确下,YPHP的路由核心就是 act 和 op 。由这两个参数来确定具体的动作行为,所以设计一个节点属性的时候,act 和 op 是必不可少的,而且会作为后续判断用户访问一个路由即一个 act 和 op 的组合,首先会判断这个组合的节点是否存在,并且是否拥有这个act和op 即这个节点的权限。

考虑到左侧的导航栏要根据用户角色动态生成导航节点数,所以还需要加入一个 is_url 的字段,用于判断是否为导航,父节点还会配以图标 icon。

比如后台中 我的博客 是个节点,其下面还有3个子节点,分别为:文章管理(act=blog&op=article)、栏目管理(act=blog&op=category)、标签管理(act=blog&op=tag),而文章管理节点下又有子节点,添加博客文章、修改博客文章、删除博客文章、设置文章限制等等等等... 

如图:

20171219094953

当然我也有写这些功能方法的代码。

看下节点表node 的字段名和注释吧。

20171219095639


用户

用户这块,我就在之前的基础上加了一个role_id字段而已,用来关联下角色表role , 表示下用户角色。

后台管理员用户表 admin

20171219100745

其中is_admin字段如果为1的话,表示改用户为超级管理员。则导航和权限都不用判断了,直接全部展示全部通过。


角色

角色表的话,也很简单。角色id 和 角色名为主 其他都可有可无。

用户角色表 role

20171219140800


角色与节点的关联

根据用户角色,获取对应的可见节点导航(is_url=1) 和 节点访问权限 。所以这角色与节点的关联,才是RBAC里面最难的部分。

角色节点关系表 role_node

20171219142548

这边用了复合主键,role_id 和 node_id 都设置为主键。


最后

数据库设计完毕,后续就是具体实现了。我只能按照我具体的实现过程还整理了。

php mysql YPHP


上一篇:YPHP中事务的扩展以及使用

PHP控制前端部分标签选中状态:下一篇