修复CRUD目录大小写问题
修复API接口的安全问题 优化MutationObserver在IE10的兼容问题
正在显示
8 个修改的文件
包含
70 行增加
和
61 行删除
@@ -4,7 +4,7 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。 | @@ -4,7 +4,7 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。 | ||
4 | 4 | ||
5 | ## **主要特性** | 5 | ## **主要特性** |
6 | 6 | ||
7 | -* 基于`Auth`验证的权限管理系统 | 7 | +* 基于Auth的权限管理系统 |
8 | * 支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及权限设置 | 8 | * 支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及权限设置 |
9 | * 支持单管理员多角色 | 9 | * 支持单管理员多角色 |
10 | * 支持管理子级数据或个人数据 | 10 | * 支持管理子级数据或个人数据 |
@@ -13,12 +13,11 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。 | @@ -13,12 +13,11 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。 | ||
13 | * 一键压缩打包JS和CSS文件,一键CDN静态资源部署 | 13 | * 一键压缩打包JS和CSS文件,一键CDN静态资源部署 |
14 | * 一键生成控制器菜单和规则 | 14 | * 一键生成控制器菜单和规则 |
15 | * 一键生成API接口文档 | 15 | * 一键生成API接口文档 |
16 | -* 完善的前端功能组件开发 | ||
17 | - * 基于`AdminLTE`二次开发 | ||
18 | - * 基于`Bootstrap`开发,自适应手机、平板、PC | ||
19 | - * 基于`RequireJS`进行JS模块管理,按需加载 | ||
20 | - * 基于`Less`进行样式开发 | ||
21 | - * 基于`Bower`进行前端组件包管理 | 16 | +* 完善的前端功能组件 |
17 | + * 基于AdminLTE二次开发 | ||
18 | + * 基于Bootstrap开发,自适应手机、平板、PC | ||
19 | + * 基于RequireJS进行JS模块管理,按需加载 | ||
20 | + * 基于Bower进行前端组件包管理 | ||
22 | * 强大的插件扩展功能,在线安装卸载升级插件 | 21 | * 强大的插件扩展功能,在线安装卸载升级插件 |
23 | * 通用的会员模块和API模块 | 22 | * 通用的会员模块和API模块 |
24 | * 共用同一账号体系的Web端会员中心权限验证和API接口会员权限验证 | 23 | * 共用同一账号体系的Web端会员中心权限验证和API接口会员权限验证 |
@@ -27,6 +26,7 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。 | @@ -27,6 +26,7 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。 | ||
27 | * 强大的第三方模块支持(CMS、博客、文档生成) | 26 | * 强大的第三方模块支持(CMS、博客、文档生成) |
28 | * 整合第三方短信接口(阿里云、创蓝短信) | 27 | * 整合第三方短信接口(阿里云、创蓝短信) |
29 | * 无缝整合第三方云存储(七牛、阿里云OSS、又拍云)功能 | 28 | * 无缝整合第三方云存储(七牛、阿里云OSS、又拍云)功能 |
29 | +* 第三方富文本编辑器支持(Summernote、Tinymce、百度编辑器) | ||
30 | * 第三方登录(QQ、微信、微博)整合 | 30 | * 第三方登录(QQ、微信、微博)整合 |
31 | * Ucenter整合第三方应用 | 31 | * Ucenter整合第三方应用 |
32 | 32 | ||
@@ -42,7 +42,7 @@ https://demo.fastadmin.net | @@ -42,7 +42,7 @@ https://demo.fastadmin.net | ||
42 | 42 | ||
43 | 密 码:123456 | 43 | 密 码:123456 |
44 | 44 | ||
45 | -提 示:演示站数据无法进行删除和修改,只能新增,完整体验请下载源码安装体验 | 45 | +提 示:演示站数据无法进行修改,请下载源码安装体验全部功能 |
46 | 46 | ||
47 | ## **界面截图** | 47 | ## **界面截图** |
48 |  | 48 |  |
@@ -53,15 +53,13 @@ https://demo.fastadmin.net | @@ -53,15 +53,13 @@ https://demo.fastadmin.net | ||
53 | 53 | ||
54 | 交流社区: https://forum.fastadmin.net | 54 | 交流社区: https://forum.fastadmin.net |
55 | 55 | ||
56 | -QQ群: [636393962](https://jq.qq.com/?_wv=1027&k=487PNBb)(交流群) [696992864](https://jq.qq.com/?_wv=1027&k=5R2AB00)(高级群,付费加入) | 56 | +QQ群: [636393962](https://jq.qq.com/?_wv=1027&k=487PNBb)(交流群①) [708784003](https://jq.qq.com/?_wv=1027&k=5ObjtwM)(交流群②) [696992864](https://jq.qq.com/?_wv=1027&k=5R2AB00)(高级群,付费加入) |
57 | 57 | ||
58 | Email: (karsonzhang#163.com, 把#换成@) | 58 | Email: (karsonzhang#163.com, 把#换成@) |
59 | 59 | ||
60 | -weibo: [@karsonzhang](https://weibo.com/karsonzhang) | ||
61 | - | ||
62 | Github: https://github.com/karsonzhang/fastadmin | 60 | Github: https://github.com/karsonzhang/fastadmin |
63 | 61 | ||
64 | -Git@OSC: https://gitee.com/karson/fastadmin | 62 | +Gitee: https://gitee.com/karson/fastadmin |
65 | 63 | ||
66 | ## **特别鸣谢** | 64 | ## **特别鸣谢** |
67 | 65 | ||
@@ -69,12 +67,18 @@ Git@OSC: https://gitee.com/karson/fastadmin | @@ -69,12 +67,18 @@ Git@OSC: https://gitee.com/karson/fastadmin | ||
69 | 67 | ||
70 | ThinkPHP:http://www.thinkphp.cn | 68 | ThinkPHP:http://www.thinkphp.cn |
71 | 69 | ||
72 | -AdminLTE:https://almsaeedstudio.com | 70 | +AdminLTE:https://adminlte.io |
73 | 71 | ||
74 | Bootstrap:http://getbootstrap.com | 72 | Bootstrap:http://getbootstrap.com |
75 | 73 | ||
76 | jQuery:http://jquery.com | 74 | jQuery:http://jquery.com |
77 | 75 | ||
76 | +Bootstrap-table:https://github.com/wenzhixin/bootstrap-table | ||
77 | + | ||
78 | +Nice-validator: https://validator.niceue.com | ||
79 | + | ||
80 | +SelectPage: https://github.com/TerryZ/SelectPage | ||
81 | + | ||
78 | 82 | ||
79 | ## 版权信息 | 83 | ## 版权信息 |
80 | 84 |
@@ -920,7 +920,7 @@ EOD; | @@ -920,7 +920,7 @@ EOD; | ||
920 | $content = $this->getReplacedStub($name, $data); | 920 | $content = $this->getReplacedStub($name, $data); |
921 | 921 | ||
922 | if (!is_dir(dirname($pathname))) { | 922 | if (!is_dir(dirname($pathname))) { |
923 | - mkdir(strtolower(dirname($pathname)), 0755, true); | 923 | + mkdir(dirname($pathname), 0755, true); |
924 | } | 924 | } |
925 | return file_put_contents($pathname, $content); | 925 | return file_put_contents($pathname, $content); |
926 | } | 926 | } |
@@ -92,6 +92,9 @@ class Api | @@ -92,6 +92,9 @@ class Api | ||
92 | */ | 92 | */ |
93 | protected function _initialize() | 93 | protected function _initialize() |
94 | { | 94 | { |
95 | + //移除HTML标签 | ||
96 | + $this->request->filter('strip_tags'); | ||
97 | + | ||
95 | $this->auth = Auth::instance(); | 98 | $this->auth = Auth::instance(); |
96 | 99 | ||
97 | $modulename = $this->request->module(); | 100 | $modulename = $this->request->module(); |
@@ -53,10 +53,6 @@ class Frontend extends Controller | @@ -53,10 +53,6 @@ class Frontend extends Controller | ||
53 | } | 53 | } |
54 | $this->auth = Auth::instance(); | 54 | $this->auth = Auth::instance(); |
55 | 55 | ||
56 | - $modulename = $this->request->module(); | ||
57 | - $controllername = strtolower($this->request->controller()); | ||
58 | - $actionname = strtolower($this->request->action()); | ||
59 | - | ||
60 | // token | 56 | // token |
61 | $token = $this->request->server('HTTP_TOKEN', $this->request->request('token', \think\Cookie::get('token'))); | 57 | $token = $this->request->server('HTTP_TOKEN', $this->request->request('token', \think\Cookie::get('token'))); |
62 | 58 |
@@ -34,7 +34,7 @@ class Mysql extends Driver | @@ -34,7 +34,7 @@ class Mysql extends Driver | ||
34 | if ($this->options['connection']) { | 34 | if ($this->options['connection']) { |
35 | $this->handler = \think\Db::connect($this->options['connection'])->name($this->options['table']); | 35 | $this->handler = \think\Db::connect($this->options['connection'])->name($this->options['table']); |
36 | } else { | 36 | } else { |
37 | - $this->handler = \think\Db::name('user_token'); | 37 | + $this->handler = \think\Db::name($this->options['table']); |
38 | } | 38 | } |
39 | } | 39 | } |
40 | 40 |
@@ -142,21 +142,23 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, undefine | @@ -142,21 +142,23 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, undefine | ||
142 | if (layerfooter.size() > 0) { | 142 | if (layerfooter.size() > 0) { |
143 | // 监听窗口内的元素及属性变化 | 143 | // 监听窗口内的元素及属性变化 |
144 | // Firefox和Chrome早期版本中带有前缀 | 144 | // Firefox和Chrome早期版本中带有前缀 |
145 | - var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver | ||
146 | - // 选择目标节点 | ||
147 | - var target = layerfooter[0]; | ||
148 | - // 创建观察者对象 | ||
149 | - var observer = new MutationObserver(function (mutations) { | ||
150 | - Fast.api.layerfooter(layero, index, that); | ||
151 | - mutations.forEach(function (mutation) { | 145 | + var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; |
146 | + if (MutationObserver) { | ||
147 | + // 选择目标节点 | ||
148 | + var target = layerfooter[0]; | ||
149 | + // 创建观察者对象 | ||
150 | + var observer = new MutationObserver(function (mutations) { | ||
151 | + Fast.api.layerfooter(layero, index, that); | ||
152 | + mutations.forEach(function (mutation) { | ||
153 | + }); | ||
152 | }); | 154 | }); |
153 | - }); | ||
154 | - // 配置观察选项: | ||
155 | - var config = {attributes: true, childList: true, characterData: true, subtree: true} | ||
156 | - // 传入目标节点和观察选项 | ||
157 | - observer.observe(target, config); | ||
158 | - // 随后,你还可以停止观察 | ||
159 | - // observer.disconnect(); | 155 | + // 配置观察选项: |
156 | + var config = {attributes: true, childList: true, characterData: true, subtree: true} | ||
157 | + // 传入目标节点和观察选项 | ||
158 | + observer.observe(target, config); | ||
159 | + // 随后,你还可以停止观察 | ||
160 | + // observer.disconnect(); | ||
161 | + } | ||
160 | } | 162 | } |
161 | } | 163 | } |
162 | }, options ? options : {}); | 164 | }, options ? options : {}); |
@@ -796,21 +796,23 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u | @@ -796,21 +796,23 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u | ||
796 | if (layerfooter.size() > 0) { | 796 | if (layerfooter.size() > 0) { |
797 | // 监听窗口内的元素及属性变化 | 797 | // 监听窗口内的元素及属性变化 |
798 | // Firefox和Chrome早期版本中带有前缀 | 798 | // Firefox和Chrome早期版本中带有前缀 |
799 | - var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver | ||
800 | - // 选择目标节点 | ||
801 | - var target = layerfooter[0]; | ||
802 | - // 创建观察者对象 | ||
803 | - var observer = new MutationObserver(function (mutations) { | ||
804 | - Fast.api.layerfooter(layero, index, that); | ||
805 | - mutations.forEach(function (mutation) { | 799 | + var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; |
800 | + if (MutationObserver) { | ||
801 | + // 选择目标节点 | ||
802 | + var target = layerfooter[0]; | ||
803 | + // 创建观察者对象 | ||
804 | + var observer = new MutationObserver(function (mutations) { | ||
805 | + Fast.api.layerfooter(layero, index, that); | ||
806 | + mutations.forEach(function (mutation) { | ||
807 | + }); | ||
806 | }); | 808 | }); |
807 | - }); | ||
808 | - // 配置观察选项: | ||
809 | - var config = {attributes: true, childList: true, characterData: true, subtree: true} | ||
810 | - // 传入目标节点和观察选项 | ||
811 | - observer.observe(target, config); | ||
812 | - // 随后,你还可以停止观察 | ||
813 | - // observer.disconnect(); | 809 | + // 配置观察选项: |
810 | + var config = {attributes: true, childList: true, characterData: true, subtree: true} | ||
811 | + // 传入目标节点和观察选项 | ||
812 | + observer.observe(target, config); | ||
813 | + // 随后,你还可以停止观察 | ||
814 | + // observer.disconnect(); | ||
815 | + } | ||
814 | } | 816 | } |
815 | } | 817 | } |
816 | }, options ? options : {}); | 818 | }, options ? options : {}); |
@@ -796,21 +796,23 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u | @@ -796,21 +796,23 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u | ||
796 | if (layerfooter.size() > 0) { | 796 | if (layerfooter.size() > 0) { |
797 | // 监听窗口内的元素及属性变化 | 797 | // 监听窗口内的元素及属性变化 |
798 | // Firefox和Chrome早期版本中带有前缀 | 798 | // Firefox和Chrome早期版本中带有前缀 |
799 | - var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver | ||
800 | - // 选择目标节点 | ||
801 | - var target = layerfooter[0]; | ||
802 | - // 创建观察者对象 | ||
803 | - var observer = new MutationObserver(function (mutations) { | ||
804 | - Fast.api.layerfooter(layero, index, that); | ||
805 | - mutations.forEach(function (mutation) { | 799 | + var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; |
800 | + if (MutationObserver) { | ||
801 | + // 选择目标节点 | ||
802 | + var target = layerfooter[0]; | ||
803 | + // 创建观察者对象 | ||
804 | + var observer = new MutationObserver(function (mutations) { | ||
805 | + Fast.api.layerfooter(layero, index, that); | ||
806 | + mutations.forEach(function (mutation) { | ||
807 | + }); | ||
806 | }); | 808 | }); |
807 | - }); | ||
808 | - // 配置观察选项: | ||
809 | - var config = {attributes: true, childList: true, characterData: true, subtree: true} | ||
810 | - // 传入目标节点和观察选项 | ||
811 | - observer.observe(target, config); | ||
812 | - // 随后,你还可以停止观察 | ||
813 | - // observer.disconnect(); | 809 | + // 配置观察选项: |
810 | + var config = {attributes: true, childList: true, characterData: true, subtree: true} | ||
811 | + // 传入目标节点和观察选项 | ||
812 | + observer.observe(target, config); | ||
813 | + // 随后,你还可以停止观察 | ||
814 | + // observer.disconnect(); | ||
815 | + } | ||
814 | } | 816 | } |
815 | } | 817 | } |
816 | }, options ? options : {}); | 818 | }, options ? options : {}); |
-
请 注册 或 登录 后发表评论