构建后台项目 后续会推出一些自己写的插件
- php >= 7.1
- composer
- mysql >= 5.6
composer install- 复制
.env.example文件为.env php artisan key:generate- 修改
.env中的APP_URL为虚拟主机中配置的域名, 并配置数据库连接
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=admin-iframe
DB_USERNAME=homestead
DB_PASSWORD=secret
php artisan migrate --seed数据库迁移和填充- 数据库迁移后, 默认的后台用户
username: admin, password: 123456, 也可以自己后台用户php artisan generate:admin username password bootstrap/cache和storage/两个目录需要配置读写权限- 本地文件上传,
php artisan storage:link或者手动创建软连ln -s /项目目录/storage/app/public public/storage - 配置文件
config('permission.debug')或者env('PERMISSION_DEBUG'); 为true时, 不验证权限,false时, 强制验证权限
- 加入权限 laravel-permission, 增加 权限调试模式(不验证权限), 修改
.env文件PERMISSION_DEBUG=true - 添加管理员菜单,
php artisan db:seed --class=MenusTableSeeder, 并将全部菜单赋予第一个管理员 - 根据后台路由(
admin.php) 添加权限,php artisan db:seed --class=PermissionsTableSeeder, 并将全部权限赋予administer, 同时更新菜单(需要重新登陆才能看到效果)
- 依赖于 jacobcyl/ali-oss-storage, 重写其中的一部分功能
App\Providers\AppServiceProvider@boot,App\Services\AliOssAdapter - 配置
.env
# (可选) 修改默认的文件上传为 oss
FILESYSTEM_DRIVER=oss
# (必须) oss key
ALI_ACCESS_ID=
# (必须) oss secret
ALI_ACCESS_KEY=
# (必须) bucket 名称
ALI_BUCKET=xxx
# (必须) cdn 域名
ALI_ENDPOINT=oss-cn-xxx.aliyuncs.com
# (可选) 自定义 域名
ALI_CDN_DOMAIN=xxx.xxx.xxx
# (可选) 是否强制用 https 访问
ALI_SSL=true
- 用法同框架默认的 文件系统
- 将 远程文件 上传到 oss
// env('FILESYSTEM_DRIVER') == oss
Storage::putRemoteFile('target/path/to/file/jacob.jpg', 'http://example.com/jacob.jpg');
// env('FILESYSTEM_DRIVER') != oss
Storage::disk('oss')->putRemoteFile('target/path/to/file/jacob.jpg', 'http://example.com/jacob.jpg');- 在线测试
- 加入签名验证
app/Http/Middleware/Signature.php, 中间件signature - 添加配置文件
cp signature.php.example config/signature.php, 这个配置文件已由 版本控制忽略, 以便于保证每个环境的签名安全 - 验证 请求参数 或者 请求头部 中 必须携带
api-token参数 - 目前没有想到更好的办法, 先试用一段时间, 后续改正
// 由服务端提供
$access_key = '123456';
// 由服务端提供
$secret_key = '123456';
// 6位随机字符串, 由 大小写字母, _(下划线) 组成
$str = '123456';
// 当天时间戳(秒级)
$time = time();
// 计算签名
$sign = md5($str . '.' . $time . '.' . $secret_key);
// 得到api-token
$token = $access_key . "." + $timestamp . "." . $str . "." . $sgin;// 由服务端提供
var access_key = '123456';
// 由服务端提供
var secret_key = '123456';
// 6位随机字符串, 由 大小写字母, _(下划线) 组成
var str = '123456';
// 当天时间戳(秒级)
var time = parseInt(new Date().getTime() / 1000);
// 计算签名 md5 需要引用扩展, https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js
sign = md5(str + '.' + time + '.' + secret_key);
// 得到 api-token
var token = access_key + "." + timestamp + "." + str + "." + sign;
$.ajax({
method: 'get',
url: 'http://example.com',
headers: {
'accept': 'application/json',
'api-token': token
},
success: function (res) {
},
error: function (error) {
}
});- 执行
php artisan db:seed --class=PermissionsTableSeeder时, 清空缓存的Session菜单 - 初始化用户拥有的菜单, 根据权限判断
- 根据权限查询出菜单, 同时查询出菜单的父级
- 拖动排序
- 多文件管理
- 分页加载时, 每页数量较少时(少于6个), 不能触发滚动加载
- 框架 laravel/framework:5.6
- 扩展 spatie/laravel-permission
- 扩展 arcanedev/log-viewer
- 扩展 barryvdh/laravel-debugbar
- 扩展 barryvdh/laravel-ide-helper
- UI adminlte:2.3.8
- 升级
laravel/framework至5.7.* - 删除扩展
barryvdh/laravel-debugbar, 文档地址
- 还原扩展
barryvdh/laravel-debugbar(还是这个用起习惯 😄), 文档地址 - 添加权限缓存, 缓存页面的
Title部分和breadcrumb部分 - 修改权限初始化的翻译文件
- 在页面头部添加 手动清除当前用户的菜单缓存, 权限缓存 按钮
- 移除扩展 laravel-telescope
- 修复权限的bug(分配权限后, 还是看到全部的菜单)
- 修改数据表结构 keywords.type => keywords.type_id
- 添加后台登陆页背景图(在
views/admin/auth/login.blade.php可以自由更换)
- 添加中间件
Signature - 去除
Keyowrds中key的唯一验证 - 添加扩展 tucker-eric/eloquentfilter, 用于封装查询条件
- 添加扩展 jacobcyl/ali-oss-storage, AliOSS 扩展