针对LayuiAdmin后台模板使用ThinkPHP5开发的基础版本
等一个项目开始之初送需要基础功能方案。
## 项目规划:
+ 1、完善通用系统后台框架后会独立出一个用户后台分支。
+ 2、系统通用后台介绍:就是现在这个项目计划完善成为一个通用的拿来就可以用基础性系统后台项目。
+ 3、用户后台介绍:计划做成一个可提高个人生产力的平台,前端依然使用LayuiAdminPro后台模板后端使用PHP实现(主架构开源),
+ 目前计划实现的主要服务有:
+ 1、可添加基于微信公众号模板通知的计划任务(如生日提醒、监控等)
+ 2、基于AES加密的记事本(只保存加密后的数据因此除本人外无法确认输入密码后解码的数据是否是正确数据)
+ 3、提供内网穿透服务
+ 4、提供API调用(IP所在地查询、二维码识别与生成、通过HTTP请求头分析客户端数据)
+ 5、数据分享(用户可在平台标记收藏自己的资源同时分享出来)
+ 6、提供简单容用的定制化网址导航。
## 项目近期任务:
+ 1、升级LayuiAdminPro后台模板与官方版本一致。
+ 2、设计修改微信类库的代码实现(如结合websocket的扫码登录、支付查询、微信客服等)进行模块化设计。
+ 4、重新规划后端的代码实现与规范。
+ 5、搭建可提供内网穿透服务、websocket通讯的服务。
+ 6、完善WEB IM方案。
## 运行环境的简单介绍:
+ 1、推荐PHP7+版本+MySQL+Nginx
+ 2、功能模块中大量运用到Redis
## 文档:
+ 更新日志
+ 演示地址 ,登录用户:test 密码:p123456(测试账号屏蔽大部分敏感权限)
## 目录结构简介: ~~~ www WEB部署目录(或者子目录) ├─admin 系统后台应用目录 ├─public 系统后台入口 │ ├─static 公共资源 │ │ ├─index Layuiadmin 模板文件 ├─extend 主要功能类目录 │ ├─common 公共类文件 │ │ ├─authority 权限相关类 │ │ │ ├─AdminMenuAccess.php 菜单权限 │ │ │ ├─AdminRole.php 用户角色组 │ │ │ ├─AdminRoleMenuAccess.php 菜单权限与用户角色组关系 │ │ │ ├─AdminRoleRouteAccess.php 方法权限与用户角色组关系 │ │ │ ├─AdminRouteAccess.php 方法权限 │ │ │ ├─AdminUserRole.php 系统管理员与角色关系模型 │ │ ├─console think 命令行 │ │ │ ├─test.php think 指令类示例 │ │ ├─custom 获取公共信息 │ │ │ ├─TerminalInfo.php 获取web客户端信息类(包括ip信息) │ │ ├─heillog 日志系列 │ │ │ ├─ErrorLog.php 系统日志写入类 │ │ │ ├─SsrUserLog.php SSR操作用户记录日志写入类 │ │ ├─helper 自定义助手函数系列 │ │ │ ├─helper.php 自定义助手函数 │ │ ├─menu 菜单系列 │ │ │ ├─AdminMenu.php 系统后台菜单 │ │ │ ├─AppMenu.php 用户前台菜单 │ │ ├─redis redis系列 │ │ │ ├─RedisLogin.php redis登录类 │ │ │ ├─RedisModel.php redis基类 │ │ ├─Safety 密码、验证、JWT系列、数据加密等相关 │ │ │ ├─Safetylogin.php 密码、验证、JWT系列、数据加密等相关 │ │ ├─VerifiController 用以被控制器继承的权限验证、登录验证、基本信息获取 │ │ │ ├─AdminLoginVerifi.php 系统后台 │ │ │ ├─UserLoginVerifi.php 用户前台 │ ├─SendMail 阿里云邮件类 │ │ ├─EmailLog.php 邮件日志类 │ │ ├─SendMail.php 初始化邮件发送类 │ │ ├─Mail.php 邮件发送方法类 ├─table.sql 表结构(用户表中的用户需要自己添加) ├─config.js LayuiAdmin的配置 注意:这里在\thinkphp\library\think\log\driver目录下增加MysqFile.php驱动类使用MySQL记录系统错误日志(可在应用的config.php中修改) ~~~ ## 配置简介: + 应用的配置都在应用目录下的config.php中,具体的直接打开config.php文件就可以了解。 + LayuiAdmin的配置在根目录下config.js中 ## 注意: + 由于LayuiAdmin需要授权故不在此上次代码授权地址 + 由于使用了ThinkPHP5.0+框架请先了解熟悉ThinkPHP的使用手册地址 + 使用项目代码的前提是你已经了解 ThinkPHP5与LayuiAdmin的使用。 ### 下载使用ThinkPHP5.0+框架: + 1、本项目中不包含 ThinkPHP 与LayuiAdmin 的文件: + 使用安装 ThinkPHP ~~~ 使用 composer 安装 ThinkPHP composer create-project topthink/think=5.0.* tp5 --prefer-dist 使用 git 安装 ThinkPHP https://github.com/top-think/think ~~~ + 2、获取LayuiAdmin授权授权地址 ## 思路介绍: #### 热数据的缓存: + 项目使用Redis缓存大部分的重复调要数据如:JWT(JSON Web Token)标准的鉴权方案需要的数据、登录保存的用户基本数据、菜单数据、权限数据等。 #### JWT鉴权处理: + 登录控制有两种方案Redis+mysql、纯redis 前者考虑到使用纯redis方案是利用redis的kye过期自动删除 不会保存登录数据(我自己找的理由)使用mysql保存基本的登录数据,纯redis方案是把所有的JWT(JSON Web Token)数据保存在redis中然后利用redis的kye过期自动删除功能控制登录的有效性(如何使用鉴权下面详细介绍)。 #### 应用配置config: + 考虑到部分项目可能会吧前(用户)后台(系统)放在一个项目中(以不同应用的形式存在)使用同一个redis数据库,就在配置文件(应用目录下config.php)中对配置进行了区分(下面会详细说明)。 #### RBAC、菜单权限、权限的继承: + 菜单权限与方法权限(控制器方法)共同使用一个用户组系统。 + 除index首页(宿主页面)的渲染、登录注册、退出登录、对外开放API(微信)等控制器外的所有控制器请继承extend\VerifiController\AdminLoginVerifi.php 类由该类进行权限控制。 #### 编写的规范: + 所有业务逻辑与数据操作都放在模型(M)中,控制器(C)中不再有任何业务逻辑也不要在控制器中进行db操作,控制器只做请求的转发与权限控制。 API数据规范:控制器中所有的API数据(针对LayuiAdmin的)统一使用Result()助手函数(helper.php)。
~~~
namespace app\authority\controller; /** * 系统用户组管理 (这里必须加以说明控制器功能) */ class Menuaccess extends \VerifiController\AdminLoginVerifi (继承AdminLoginVerifi) { (必须 有 title 静态方法 方法内以数组键值对【'方法'=>'方法说明'】)/** * [title 标题] * @Effect * @return [type] [description] */ static function title() { return[ 'updateList'=>'更新系统菜单权限', 'setList'=>'设置用户组菜单权限', ]; }
}
</pre> <ul> <li>数据模型统一继承在\extend\common\目录下增加基础模型类common\Model,继承后有基础分页查询方法getPageList($page,$limit,$whe,$hidden=[])可用 $whe查询搜索条件【为键值对数组】、$hidden限制输出字段【为索引数组】。</li> </ul> <p>#### 路由配置与RESTful规范: + 路由配置---在应用下config.php中配置route<em>config</em>file=['route'.DS.'模块名','route'.DS.'模块名']来为应用下各模块配置单独的路由规则文件,路由各种文件在应用目录下的route文件夹下以【模块.php】命名. + RESTful规范。 #### 日志处理: + 这里在\thinkphp\library\think\log\driver目录下增加MysqFile.php驱动类使用MySQL记录系统错误日志(如果不是要可在应用的config.php中修改)MysqFile.php只是对tp原有的驱动类进行了简单的修改以达到使用mysql记录系统基本的错误(使用extend\heillog\ErrorLog.php类写入)。 + 建议尽可能的对用户、管理员的所有操作进行记录。 #### 常用方法: + 控制器中所有的API数据(针对LayuiAdmin的)统一使用Result()助手函数(helper.php)。 + app\login\model\MainUser 类的 MainUser::setUserData($id,$type=false),当type=false时只获取用户的数据,为true时获取并且更新Redis中的用户数据(排除了密码数据)。 + 分页查询方法getPageList($page,$limit,$whe,$hidden=[])可用 $whe查询搜索条件【为键值对数组】、$hidden限制输出字段【为索引数组】,注意必须是继承common\Model的模型才可以使用。 #### WEB IM方案 长链接(websocket、GatewayWorker): + WEB IM方案前端所以LayIM,后端使用ThinkPHP5+GatewayWorker结合构建。</p> <ul> <li><p>前端具体在/public/static/index/src/views/index.html中(这里注意var socket = new WebSocket('wss://demo.heil.red:8282');中的地址:1、wss是在https情况下使用的同时必须使用域名,如果你本地环境请修改我ws://127.0.0.1:8282)。</p></li> <li><p>GatewayWorker具体在GatewayWorker/Applications/YourApp/下的三个文件需要根据你的实际环境进行配置(特别注意当tp环境与GatewayWorker环境不在统一网络下)start_gateway.php文件中配置ssl(https证书)。</p></li> <li><p>启动GatewayWorker 使用命令行进入到GatewayWorker目录 使用 php start.php start -d命令 没有-d是调试命令。</p></li> <li><p>gatewayclient(Gateway客户端)/vendor/workerman/gatewayclient/Gateway.php。</p></li> <li><p>ThinkPHP5在IM模块只的IM控制器中有简单的业务代码。</p></li> <li><p>GatewayWorker<a href="http://doc2.workerman.net/326106">文档</a> 、layim<a href="http://www.layui.com/doc/modules/layim.html">文档</a>。</p></li> </ul> <h4>think 命令行工具:</h4> <ul> <li>1、需要在下面根目录下的think 文件 中配置
// 定义项目路径 define('APP_PATH', './admin/'); // 加载框架命令行引导文件 require './thinkphp/console.php';
<li>2、在应用根目录下的command.php文件中配置指令类的引用地址建议统一放在\extend\console目录下(不需要.php)
// 定义项目路径 return [ '\extend\console\test', ];
~~~
## 开始构建: + 1、获取LayuiAdmin授权并且选择代码,复制黏贴到public\static\index目录下 + 2、使用本项目代码在根目录进行粘贴替换。 + 3、根据自己项目的需求对应用目录下config.php进行配置修改。 ## 资源分享区 ### 软件 * 官方免费Xftp和Xshell [https://www.netsarang.com/en/free-for-home-school/](这个是官方免费的只需要填写姓名和邮箱就可以收到一封带有下载地址的官方邮件) ### composer 包分享 * 自动获取客户端浏览器(内核和版本)网络状态(移动网络或者是WiFi)通过IP获取精确到城市的地理位置(支持自动更新本地纯真IP地址数据库)、移动设备可获取到 系统(IOS、Android精确到系统版本)、微信版本(使用微信时)的类库 [https://github.com/pizepei/TerminalInfo] * composer require pizepei/terminal-info * 时间日历(农历公历互相转换) [https://github.com/XhinLiang/LunarCalendar] * composer require overtrue/chinese-calendar