热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

项目优化-角色不同样式不同数据不同-CakePHP实践,Go语言社区,Golang程序员人脉社

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

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

重构:

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:


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

Element中添加相应文件:

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

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

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

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

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

最终效果:

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

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


推荐阅读
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
author-avatar
没有丝袜姑娘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有