项目优化-角色不同样式不同数据不同-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:

项目优化-角色不同样式不同数据不同-CakePHP实践_第1张图片

layout中加载对应Element:


Flash->render() ?> element('Dashboard/content_'.$layoutCode);?>

Element中添加相应文件:

项目优化-角色不同样式不同数据不同-CakePHP实践_第2张图片

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

为了区分不同用户的项目数据,使用bake,在项目统计表project_overviews中新增user_id字段,更新project_overviews的Model:
项目优化-角色不同样式不同数据不同-CakePHP实践_第3张图片

添加项目时记录项目所属用户:
项目优化-角色不同样式不同数据不同-CakePHP实践_第4张图片

修改content_pm和content_default中调用的数据统计接口,根据角色不同加载数据不同:
判断用户角色,是老总和超级管理员则统计所有项目数据;否则统计用户项目数据;统计数据的API核心代码:
项目优化-角色不同样式不同数据不同-CakePHP实践_第5张图片

Acl中isRoles方法来判断是否是某些角色:
项目优化-角色不同样式不同数据不同-CakePHP实践_第6张图片

最终效果:

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

超级管理员admin登录后的控制面板:
项目优化-角色不同样式不同数据不同-CakePHP实践_第7张图片

你可能感兴趣的:(重构,分角色,CakePHP,Code)