YPHP后台中RBAC实现整理(角色篇)


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

现在开始实现整理其中关于角色部分的实现,主要包括 角色的添加,角色的修改,角色的删除

对于角色的信息,要分作两部分对待,一是角色基本信息(角色id,角色名,角色备注等),二是角色与节点的关联(对什么节点拥有权限)


角色列表

角色的基本属性比较少,主要还是设计角色和节点关联的内容。角色列表展示的也就是角色名和角色描述以及一些基本操作入口了。

1

这里的删除导航缓存 和 删除管理员导航缓存 就是针对不同角色显示对应的后台左侧导航的缓存进行删除的操作,其进入后台会重新渲染并生成缓存。


添加角色

添加角色的话,角色的基本信息就填一下角色名和角色备注。然后角色与节点关联,我也是生成一个可供选择的节点树,个人还是很喜欢的。

1

角色名的话,我做了防重复的限制,前端用 bootstrapValidator 的 remote 方法。当然后端也会做限制,毕竟前端的验证都是可以绕过的。

下面重点放在表单中角色权限节点树的生成和处理上。

1

节点树的生成和上次大同小异,只不过这次换成了checkbox,然后给每个input加上了id。

提交表单时,在 bootstrapValidator 的 submitHandler 会先点击后使用 js 获取被选择的 checkbox 的 id,得到一个 node_ids 数组 ,再放入隐藏的表单域 role_nodes 里面,最后再提交表单。

后端需要对 role_nodes 进行过滤,只接收整形的节点id。先插入角色基本信息至角色表role中,并得到自增的id。

然后就是往role_node表中插入数据了。

$role_id = $m_system->addRole($data,true);
    if($role_id){
        $node_ids=explode(",",$role_nodes);//角色权限节点数组
        $res = $m_system->insertRoleNodes($role_id,$node_ids);
        ...
        ...
        ...


修改角色

修改角色和前面的添加角色最大的不同有2点,1. 首先得在节点树上展示该角色已经拥有的角色权限。 2. 修改角色权限的时候有两步操作,先清空掉当前角色的节点关联,再重新添加新的关联,这里涉及到了事务。

显示已拥有的权限

首先是,先获取当前角色的节点权限,一维数组 $role_node ,就是 node_id 的集合,并 assign 到前端模板。

接着就是前端模板的处理,在js块中使用php变量。

1

这样就可以了。只不过我感觉耦合有点大。其实可以拆开看写一个接口,然后前端页面一加载用ajax请求,具体看自己喜欢吧。


修改节点权限(事务)

刚做到这块的时候,我的YPHP Model 层还没有做事务的封装,正好要做这个功能,顺便集成进去的,还整理了一篇文章,这里略,贴个方法就是了。

1


删除角色

删除角色最简单了。就是删除角色基本信息,删除角色的节点关联,删除角色的导航缓存。。。

我就在前2部分做了个事务,其实无所谓的,角色的删掉了,关联也用不到,就是残留在数据库里就是了,影响不大。

至于角色删了,然后拥有改角色的用户,我没有去改。用户登录后,直接提示非法角色就是了。


最后

未完。。。下一篇,用户篇


php mysql YPHP


上一篇:根据快递单号和快递公司编号获取物流信息(爬虫,免费)

YPHP后台中RBAC实现整理(用户篇):下一篇