作者 Karson

修复CRUD目录大小写问题

修复API接口的安全问题
优化MutationObserver在IE10的兼容问题
@@ -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 ![控制台](https://gitee.com/uploads/images/2017/0411/113717_e99ff3e7_10933.png "控制台") 48 ![控制台](https://gitee.com/uploads/images/2017/0411/113717_e99ff3e7_10933.png "控制台")
@@ -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 : {});