项目优化-角色不同样式不同数据不同-CakePHP实践

项目需要进行改造的需求:

不同角色登录后显示的控制面板不一样
不同角色登录后显示的统计数据不一样

重构:

1. 不同角色登录后显示的控制面板不一样

为了不影响已有代码,新增控制面板Controller:DashboardController;
在控制面板Controller中添加角色对应Layout的数组;
根据当前登录用户的角色,加载不同的layout和content,比如项目经理是layout_pm和content_pm,默认则是layout_default何content_default;
Controller中核心代码:

        //=>确定加载的角色模板
        $redirectUrl = '';
        $layoutRoleNames = [//优先级越大越优先,对应角色名称,模板编号
            ['order' => 1, 'role' => '项目经理', 'layoutCode' => 'pm'],
            ['order' => 2, 'role' => '资料组长', 'layoutCode' => 'zl_leader'],
            ['order' => 100, 'role' => '施工队长', 'layoutCode' => '',
                'redirectUrl' => [//不设置单独模板,而是进入指定页面
                    'controller' => 'ProjectEngineeringNodes', 'action' => 'myPreNodeIndex'
                ]
            ],
        ];//角色特定模板名称,排列顺序是优先级,越往后越优先
        $nowOrder = 0;//当前角色模板优先级
        $layoutCode = 'default';//当前角色模板编号
        $nowLayout = 'sanse' . '_' . $layoutCode;
        $roles = $this->Auth->user('roles');
        foreach ($roles as $role) {
            foreach ($layoutRoleNames as $layoutRoleName) {
                if ($role['name'] === $layoutRoleName['role']) {//拥有该角色特定模板
                    $newOrder = $layoutRoleName['order'];//key 标识优先级
                    if ($newOrder > $nowOrder) {//高优先级则更新模板顺序
                        $nowOrder = $newOrder;
                        if ($layoutRoleName['layoutCode']) {
                            $layoutCode = $layoutRoleName['layoutCode'];
                            $nowLayout = 'sanse' . '_' . $layoutCode;
                        }
                        if (array_key_exists('redirectUrl', $layoutRoleName)) $redirectUrl = $layoutRoleName['redirectUrl'];
                    }
                    $nowOrder = ($newOrder > $nowOrder) ? $newOrder : $nowOrder;
                }
            }
        }
        //<=确定加载的角色模板

layout中新增,根据自己需要可以增加其他角色的layout:

layout中加载对应Element:

<!-- Content Wrapper -->
<div class="content-wrapper">
 <?= $this->Flash->render() ?>
 <?= $this->element('Dashboard/content_'.$layoutCode);?>
</div>
<!-- /Content Wrapper -->

Element中添加相应文件:

2. 不同角色登录后显示的统计数据不一样

为了区分不同用户的项目数据,使用bake,在项目统计表project_overviews中新增user_id字段,更新project_overviews的Model:

添加项目时记录项目所属用户:

修改content_pm和content_default中调用的数据统计接口,根据角色不同加载数据不同:
判断用户角色,是老总和超级管理员则统计所有项目数据;否则统计用户项目数据;统计数据的API核心代码:

Acl中isRoles方法来判断是否是某些角色:

最终效果:

项目经理pm1登录后的控制面板:

超级管理员admin登录后的控制面板:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铭记北宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值