Skip to content
This repository was archived by the owner on Aug 21, 2020. It is now read-only.

serrt/laravel-admin

Repository files navigation

admin-iframe

构建后台项目 后续会推出一些自己写的插件

项目要求

  • php >= 7.1
  • composer
  • mysql >= 5.6

安装

  1. composer install
  2. 复制.env.example文件为.env
  3. php artisan key:generate
  4. 修改.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
  1. php artisan migrate --seed 数据库迁移和填充
  2. 数据库迁移后, 默认的后台用户username: admin, password: 123456, 也可以自己后台用户php artisan generate:admin username password
  3. bootstrap/cachestorage/ 两个目录需要配置读写权限
  4. 本地文件上传, php artisan storage:link 或者手动创建软连 ln -s /项目目录/storage/app/public public/storage
  5. 配置文件 config('permission.debug') 或者 env('PERMISSION_DEBUG'); 为 true 时, 不验证权限, false 时, 强制验证权限

Feature

后台权限

  • 加入权限 laravel-permission, 增加 权限调试模式(不验证权限), 修改 .env 文件 PERMISSION_DEBUG=true
  • 添加管理员菜单, php artisan db:seed --class=MenusTableSeeder, 并将全部菜单赋予第一个管理员
  • 根据后台路由(admin.php) 添加权限, php artisan db:seed --class=PermissionsTableSeeder, 并将全部权限赋予administer, 同时更新菜单(需要重新登陆才能看到效果)

阿里云 OSS

  • 依赖于 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');

Api验证签名

  • 在线测试
  • 加入签名验证 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) {
        
    }
});

TODO

  • 执行 php artisan db:seed --class=PermissionsTableSeeder 时, 清空缓存的 Session 菜单
  • 初始化用户拥有的菜单, 根据权限判断

后台菜单管理

  • 根据权限查询出菜单, 同时查询出菜单的父级
  • 拖动排序
  • 多文件管理
  • 分页加载时, 每页数量较少时(少于6个), 不能触发滚动加载

Releases

1.0

2.0(beta)

  • 升级 laravel/framework5.7.*
  • 删除扩展 barryvdh/laravel-debugbar, 文档地址

2.1

  • 还原扩展 barryvdh/laravel-debugbar (还是这个用起习惯 😄), 文档地址
  • 添加权限缓存, 缓存页面的 Title 部分和 breadcrumb 部分
  • 修改权限初始化的翻译文件
  • 在页面头部添加 手动清除当前用户的菜单缓存, 权限缓存 按钮

2.2

  • 移除扩展 laravel-telescope
  • 修复权限的bug(分配权限后, 还是看到全部的菜单)
  • 修改数据表结构 keywords.type => keywords.type_id
  • 添加后台登陆页背景图(在 views/admin/auth/login.blade.php 可以自由更换)

2.3

About

快速构建后台, admin@123456

Resources

Stars

Watchers

Forks

Packages

No packages published