项目优化-角色不同样式不同数据不同-CakePHP实践 - Go语言中文社区

项目优化-角色不同样式不同数据不同-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登录后的控制面板:

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/hanjingjava/article/details/97014987
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 18:15:03
  • 阅读 ( 809 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢