PHP 实现动态页面路由权限实现(数据库设计,树状权限,分配权限)


前言

项目需求:后台管理系统根据用户所拥有的页面权限展示对应的页面


一、数据库设计

1:用户账号表中添加了 page_power 字段用以存储用户所拥有的页面权限数据

数据形式是加密的json数组

 2: 新增power_tree:权限表(用以存储页面侧边栏一级目录数据,以及栏目下对应的页面权限id ,以及用作分配权限时的权限树状表查询)

示例:

               power_page:页面表(用以存储页面路径各项信息)

示例:

 注意:

两张表中的字段数据必须对应前端路由格式(包括权限查询时返回的所有数据字段等都必须和页面路由格式一致)

二、使用步骤

1.获取树状权限

提供树状列表返回前端渲染用于权限分配时展示进行复选操作:

1):取出所有父级数据                                 (最终查询结果返回前端渲染)

 2):循环数组分割 power 字段,带着分割后的power到 power_page 查询子页面数据

        /**获取所欲的父级页面数据(tree表中的数据)*/
        $fPower = $treeModel->fPage();
        /**分割权限tree表中power字符 */
        foreach ($fPower as $val) {
            $arr = explode(',', $val['power']);
            /**清空循环防止叠加 */
            $power = null;
            /**循环分割后的数组获取所有子级页面数据 */
            foreach ($arr as $item) {
                $power[] = $powerModel->cPage($item);
            }
            /**将子页面数据融合到父级数据中 */
            $val['children'] = $power;
            $array[] = $val;
        }
        /**返回给前端*/
        return json(['code' => 0, 'data' => $array]);

2.分配权限

思路:前端提交数据需要数组格式(账号id,权限数组【父编号,子页面id】),后端加密存储到账户表中的 page_power 字段

    public function allocation_power()
    {
        /**接收数据 */
        $data = $this->request->param();
        /**实例模型 */
        $adminModel = new admin();
        foreach ($data as $value) {
            /**加密json数组 */
            $arrData = json_encode($value['child']);
            /**分配权限 update更改账户id相同数据的page_power => $arrData(自行编写)*/
            $allocationPower = $adminModel->allocationPower($value['id'], $arrData);
            return json(['code'=>1,'msg'=>'分配成功']);
        }
    }

 3.实现动态页面权限

思路:用户登陆成功之后,通过账号id获取page_power字段,循环查询父级和子级(将数据返回给前端)

        /**通过uid获取父级页面权限id */
        $fPage = $adminModel->fPowerArr($this->uid);
        /**解密json数组 */
        $fPage = json_decode($fPage, true);
        foreach ($fPage as $val) {
            /**获取父级数据 */
            $arrData = $powerModel->fData($val['id']);
            /**获取子级数据 */
            $arrData['child'] = $pageModel->cAllData($val['child']);
            unset($val['id']);
            unset($val['child']);
            $dataArr[] = $arrData;
        }

(最终查询结果:只会返回用户名下有的页面权限)

4.其他操作

分配权限时获取用户原有的默认权限数据(只需要查询该用户的page_power字段 json_decode 解密 返回前端)


总结

开发过程有实际变动需要自行调整哦

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值