年后的第一次更新,开年比较忙,找工作、找房子各种事,最近整理了一下代码,把各位提出的一些明显的bug改了,感谢各位童鞋好的建议。本次更新的主要内容如下:
- 1、提取了管理员信息查询的静态方法
- 2、重新优化了广告模块,图片广告管理更方便了
- 3、修复了一个文档查询的bug(过滤掉隐藏的content),感谢@jier945的建议
- 4、修复了文件管理和模板编辑的bug(文件读取用相对路径更安全)
- 5、提取了关联对象删除的公共方法
- 6、添加文档页面添加了一个新增tag的入口
- 7、去掉了admin路由中的io(暂时用不上)
- 8、优化了后台路由,添加了adminCtrl过滤器从入口处先过滤一次非法请求,提高安全性
- 9、提取了一些中文信息提示为静态变量
本次更新有两个比较大的改动:
1、广告管理模块优化了
图片广告之前是无法对每个图片属性进行编辑的,这次做了优化

2、后台入口添加了adminCtrl路由,从入口处先做一次校验,过滤掉一些非法访问,校验通过再处理后面的逻辑,同时去掉了admin.js中的一些冗余代码。
//管理员主页
router.get(["/manage","/manage/*"],function(req,res,next){
if(isAdminLogined(req)){
next();
}else{
res.redirect("/admin");
}
});
//模块管理页面
router.get('/manage/:targetPage', function(req, res, next) {
var currentPage = req.params.targetPage;
if(settings[currentPage]){
if(!checkAdminPower(req,settings[currentPage][0] + '_view')){
res.render("manage/public/notice", adminFunc.setDataForInfo('danger','对不起,您无权操作 <strong>'+settings[currentPage][1]+'</strong> 模块!'));
}else{
next();
}
}else{
next();
}
});
//通用对象列表数据查询
router.get('/manage/getDocumentList/:defaultUrl',function(req,res,next){
var currentPage = req.params.defaultUrl;
if(checkAdminPower(req,currentPage + '_view')){
next();
}else{
return res.json({});
}
});
//获取单个对象数据
router.get('/manage/:defaultUrl/item',function(req,res,next){
var currentPage = req.params.defaultUrl;
var params = url.parse(req.url,true);
var targetId = params.query.uid;
if(checkAdminPower(req,currentPage + '_view')){
if(shortid.isValid(targetId)){
next();
}else{
res.end(settings.system_illegal_param);
}
}else{
return res.json({});
}
});
//对象新增
router.post('/manage/:defaultUrl/addOne',function(req,res,next){
var currentPage = req.params.defaultUrl;
if(adminFunc.checkAdminPower(req,currentPage + '_add')){
next();
}else{
res.end(settings.system_noPower);
}
});
//更新单条记录(执行更新)
router.post('/manage/:defaultUrl/modify',function(req,res,next){
var currentPage = req.params.defaultUrl;
var params = url.parse(req.url,true);
var targetId = params.query.uid;
if(checkAdminPower(req,currentPage + '_modify')){
if(shortid.isValid(targetId)){
next();
}else{
res.end(settings.system_illegal_param);
}
}else{
res.end(settings.system_noPower);
}
});
//通用对象删除
router.get('/manage/:defaultUrl/del',function(req,res,next){
var currentPage = req.params.defaultUrl;
var params = url.parse(req.url,true);
var targetId = params.query.uid;
if(checkAdminPower(req,currentPage + '_del')){
if(shortid.isValid(targetId)){
next();
}else{
res.end(settings.system_illegal_param);
}
}else{
res.end(settings.system_noPower);
}
});
//批量删除对象
router.get('/manage/:defaultUrl/batchDel',function(req,res,next){
var currentPage = req.params.defaultUrl;
var params = url.parse(req.url,true);
var ids = params.query.ids;
var idsArr = ids.split(',');
if(adminFunc.checkAdminPower(req,currentPage + '_del')){
if(idsArr.length > 0){
next();
}else{
res.end(settings.system_atLeast_one);
}
}else{
res.end(settings.system_noPower);
}
});
//访问指定对象的数据列表(不带分页)
router.get('/manage/:modular/list', function(req, res, next) {
var currentPage = req.params.modular;
if(settings[currentPage]){
if(!checkAdminPower(req,settings[currentPage][0] + '_view')){
return res.json({});
}else{
next();
}
}else{
next();
}
});
3、adminCtrl.js 替换了之前的 validat.js ,validat.js 不再使用。新安装的童鞋要注意了哈