Commit ba72a182 authored by 张淼's avatar 张淼

1

parent 4a079002
......@@ -25,6 +25,22 @@ router.post('/role/create', function(req, res, next) {
});
});
//删除论坛角色
router.get('/role/:rid/get', function(req, res, next) {
var rid=req.params.rid;
ForumRole.findById(rid,function(err,role){
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
var rs = {};
rs.data=role;
res.json(_.assign(rs, returnCode.SUCCESS));
}
});
});
//删除论坛角色
router.post('/role/:rid/delete', function(req, res, next) {
var rid=req.params.rid;
......
......@@ -17,6 +17,9 @@ router.post('/rolePermiss/create', function(req, res, next) {
var form = {
ent_code: req.session.user.ent_code
};
req.body=buildField(req.body);
var group = new ForumRolePermission(_.assign(form, req.body));
group.save(function(err, group) {
if (err) {
......@@ -29,6 +32,135 @@ router.post('/rolePermiss/create', function(req, res, next) {
});
});
//获取角色权限
router.get('/rolePermiss/:pid/get', function(req, res, next) {
var rs = {};
var pid=req.params.pid;
if(pid){
ForumRolePermission.findById(pid,function(err,permiss){
if(err){
console.log(err);
res.json(returnCode.BUSY);
}else{
var json={};
json._id=permiss._id;
json.role=permiss.role;
json.permissionList=permiss.permission;
var rules=permiss.rules;
var integral='',exp='';
for(var i=0;i<rules.length;i=i+1){
if(rules[i].key=='integral'){//积分
integral=rules[i].value;
}else if(rules[i].key=='exp'){//经验
exp=rules[i].value;
}
}
var data={};
if(integral!=='' && integral.indexOf('-')!==-1){
var integArray=integral.split('-');
json.l_integral=integArray[0]===''?'':Number(integArray[0]);
json.r_integral=integArray[1]===''?'':Number(integArray[1]);
}
if(exp!=='' && exp.indexOf('-')!=-1){
var expArray=exp.split('-');
json.l_exp=expArray[0]===''?'':Number(expArray[0]);
json.r_exp=expArray[1]===''?'':Number(expArray[1]);
}
rs.data = json;
res.json(_.assign(rs, returnCode.SUCCESS));
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
//删除论坛权限
router.post('/rolePermiss/:pid/delete', function(req, res, next) {
var pid=req.params.pid;
if(pid){
ForumRolePermission.remove({ _id: pid},function(err,result){
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(returnCode.SUCCESS);
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
//构造规则、操作权限字段
function buildField(entity){
//-------------------------设置匹配规则开始
var rules=[];
var l_integral=entity.l_integral || '';
var r_integral=entity.r_integral || '';
var integral_value=l_integral;
integral_value=integral_value+'-'+r_integral;
var l_exp=entity.l_exp || '';
var r_exp=entity.r_exp || '';
var exp_value=l_exp;
exp_value=exp_value+'-'+r_exp;
var integralRule={
'key':'integral',
'value':integral_value
};
var expRule={
'key':'exp',
'value':exp_value
};
rules.push(integralRule);
rules.push(expRule);
entity.rules=rules;
//-----------------------------设置匹配规则结束
//-----------------------------设置操作权限开始
var permissions=entity.permission;
for(var i=0;i<permissions.length;i=i+1){
var obj=permissions[i];
if(obj.checked){
obj.value="1";
}else{
obj.value="0";
}
permissions[i]=obj;
}
entity.permission=permissions;
//-----------------------------设置操作权限结束
return entity;
}
//更新论坛角色
router.post('/rolePermiss/:pid/update', function(req, res, next) {
var pid=req.params.pid;
if(pid){
req.body=buildField(req.body);
ForumRolePermission.update({ _id: pid}, req.body,null,function(err,result){
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(returnCode.SUCCESS);
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
//获取角色权限列表
router.get('/rolePermiss/list', function(req, res, next) {
var pageNo = req.query.pageNo || 1;
......
......@@ -10,6 +10,7 @@ var forumRolePermissionService=require('../../service/forumRolePermissionService
var forumPraiseLogService=require('../../service/forumPraiseLogService');
var forumShareLogService=require('../../service/forumShareLogService');
var forumCommentService=require('../../service/forumCommentService');
var forumTagService=require('../../service/forumTagService');
var async=require('async');
module.exports = function(app) {
app.use('/admin/forum', router);
......@@ -38,13 +39,34 @@ router.get('/thread/:tid/get', function(req, res, next) {
var tid = req.params.tid || null;
var rs = {};
if (tid) {
forumThreadService.getThreadById(tid,function(err,thread){
if(err){
res.json(returnCode.BUSY);
}else{
rs.data = thread;
res.json(_.assign(rs, returnCode.SUCCESS));
}
async.parallel([
function(callback){
forumThreadService.getThreadById(tid,function(err,thread){
if(err){
res.json(returnCode.BUSY);
callback(err,null);
}else{
callback(null,thread);
}
});
},
function(callback){
forumTagService.getAllTag(req.session.user.ent_code,1,100,function(err,results){
if(err){
callback(err,null);
}else{
callback(null,results);
}
});
}
],function(err,results){
if(err){
res.json(returnCode.BUSY);
}else{
rs.data=results[0];
rs.tagList=results[1];
res.json(_.assign(rs, returnCode.SUCCESS));
}
});
} else {
res.json(returnCode.WRONG_PARAM);
......
'use strict';
var express = require('express'),
router = express.Router(),
returnCode = require('../../utils/returnCode'),
_ = require('lodash');
var mongoose = require('mongoose');
var uploadFile=require('../../utils/uploadfile');
module.exports = function(app) {
app.use('/admin/forum', router);
};
//文章收藏
router.post('/uploadFile',uploadFile('oss','forum'),function(req, res, next) {
res.json(req.uploadFile);
});
......@@ -37,13 +37,17 @@ router.get('/tag/:tid/threads', function(req, res, next) {
var conditions={
ent_code:req.session.user.ent_code
};
forumThreadService.getAllThreadByFid(conditions,pageNo,pageSize,function(err,results){
if(err){
console.error(err);
res.json(returnCode.BUSY);
}else{
res.json(_.assign(results, returnCode.SUCCESS));
}
});
if(tid){
conditions.tag={$in:[tid]};
forumThreadService.getAllThreadByFid(conditions,pageNo,pageSize,function(err,results){
if(err){
console.error(err);
res.json(returnCode.BUSY);
}else{
res.json(_.assign(results, returnCode.SUCCESS));
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
\ No newline at end of file
......@@ -17,6 +17,11 @@ var ForumRoleSchema = new Schema({
type: Number,
require: true,
default: 1
},
created: {
type: Date,
required: true,
default:Date.now
}
}, {
......
......@@ -25,6 +25,11 @@ var ForumRolePermissionSchema = new Schema({
type: Number,
require: true,
default: 1
},
created: {
type: Date,
required: true,
default:Date.now
}
}, {
'collection': 'pisns_forum_role_permission'
......
......@@ -51,9 +51,7 @@ var ForumThreadSchema = new Schema({
require: true,
default: 0
},
tag: { //话题归属标签
type: Array
},
tag: [{type: Schema.Types.ObjectId, ref: 'ForumTag'}],//话题归属标签,
comments: [{type: Schema.Types.ObjectId, ref: 'ForumComment'}], //评论内容列表
share: { //自定义分享
type: Schema.Types.ObjectId,
......
......@@ -22,8 +22,8 @@ function getAllRolePermissionData(ent_code,pageNo,pageSize,callback){
}else{
var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumRolePermission.find({ent_code:ent_code}, null, {skip: skip,limit:limit},function(err,docs){
if (err) {
ForumRolePermission.find({ent_code:ent_code}).skip(skip).limit(limit).sort('created').populate('role').exec(function(err,docs){
if (err) {
console.error(err);
callback(err,null);
} else {
......@@ -34,7 +34,10 @@ function getAllRolePermissionData(ent_code,pageNo,pageSize,callback){
obj.items=docs;
callback(null,obj);
}
});
});
// ForumRolePermission.find({ent_code:ent_code}, null, {skip: skip,limit:limit},function(err,docs){
// });
}
});
}
......
......@@ -135,7 +135,7 @@ exports.getAllThreadByFid= function(conditions,pageNo,pageSize,callback) {
var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumThread.find(conditions).populate('from').populate('info').populate({path:'comments',options:{limit:5}, select:'from to created content'}).limit(limit).skip(skip).sort('-top created').exec(function(err, docs) {
ForumThread.find(conditions).populate('from').populate('info').populate({path:'tag'}).populate({path:'comments',options:{limit:5}, select:'from to created content'}).limit(limit).skip(skip).sort('-top created').exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null);
......
'use strict';
var async = require('async');
var mongoose = require('mongoose');
var Grid = require('gridfs-stream');
var fse = require("fs-extra");
var fs = require('fs');
var crypto = require('crypto');
var ossClient = require('oss-easy');
var env = require('../../config/config');
var ossOption = {
accessKeyId: env.ossConfig.accessKeyId,
accessKeySecret: env.ossConfig.accessKeySecret
};
var isDebug = (process.env.NODE_ENV || 'development') === 'development' ? true: false;
var bucketName = isDebug === true ? env.ossConfig.bucketNameDev : env.ossConfig.bucketNameProd;
var ofs = new ossClient(ossOption, bucketName);
var gfs = null;
function handleUpload(req, uploadfile, storageType, targetPath, callback) {
if (!uploadfile) return;
var current = new Date();
var md5 = crypto.createHash('md5');
var filename = targetPath + current.getFullYear() + (current.getMonth() + 1) + current.getDate();
filename += '/';
var pos = uploadfile.name.lastIndexOf('.');
var suffix = '';
if (pos > 0) {
suffix = uploadfile.name.substr(pos);
}
md5.update(current.getTime() + '_' + uploadfile.name);
filename += md5.digest('hex') + suffix;
if (storageType === 'local') {
var fileSavePath = process.cwd() + targetPath + "/" + filename;
fse.move(uploadfile.path, fileSavePath, function(err) {
if (err) throw callback(err, null);
callback(null, {
originalName: uploadfile.name,
fileName: filename,
fileType: uploadfile.type,
fileSize: uploadfile.size,
urlFileName: global.getDFSUrlRoot() + filename,
fieldName: uploadfile.fieldName
});
});
} else if (storageType === 'gfs') {
if (!gfs) {
gfs = Grid(mongoose.connection.db, mongoose.mongo);
}
var gfs_options = {
filename: filename,
mode: 'w',
content_type: uploadfile.type,
metadata: {
'originalName': uploadfile.name
}
};
var writestream = gfs.createWriteStream(gfs_options);
fs.createReadStream(uploadfile.path).pipe(writestream);
writestream.on('error', function(err) {
console.log(err);
callback(err, null);
});
writestream.on('close', function(file) {
fs.unlink(uploadfile.path, function(err) {
if (err) {
console.log(err);
}
});
callback(null, {
originalName: uploadfile.name,
fileName: filename,
fileType: uploadfile.type,
fileSize: uploadfile.size,
urlFileName: global.getDFSUrlRoot() + filename,
fieldName: uploadfile.fieldName
});
});
} else if (storageType === 'oss') {
var filePath = '';
if (req.session.user.ent_code) {
filePath += req.session.user.ent_code + '_';
}
filePath += '' + current.getFullYear() + (current.getMonth() + 1) + current.getDate();
filePath += '_' + current.getTime() + '_' + Math.round(Math.random() * 100) + suffix;
var metadata = {
'Content-Disposition': 'attachment;filename=' + filePath,
'Cache-Control': 'max-age=86400'
};
filePath = 'upload/' + filePath;
var url = isDebug === true ? env.ossConfig.devCDNURL : env.ossConfig.prodCDNURL;
ofs.uploadFile(uploadfile.path, filePath, metadata, function(err) {
if (err) {
console.log(err);
callback(err, null);
} else {
callback(null, {
originalName: uploadfile.name,
fileName: filePath,
fileType: uploadfile.type,
fileSize: uploadfile.size,
urlFileName: url + filePath,
fieldName: uploadfile.fieldName
});
}
});
}
}
module.exports = function(storageType, targetPath) {
return function(req, res, next) {
var storePath = targetPath || '/default/';
if (req.session.user.ent_code) storePath += req.session.user.ent_code + '/';
var files = req.files;
var items = [];
for (var key in files) {
if (files[key] instanceof Array) {
items = items.concat(files[key]);
} else {
items.push(files[key]);
}
}
var asyncTasks = [];
items.forEach(function(file) {
asyncTasks.push(function(callback) {
handleUpload(req, file, storageType, storePath, callback);
});
});
async.parallel(asyncTasks, function(err, results) {
if (err) {
console.log(err);
} else {
req.uploadFile = results;
}
next(null);
});
}
}
\ No newline at end of file
......@@ -15,6 +15,14 @@ var config = {
username: '',
password: '',
poolSize: 5
},
ossConfig:{
accessKeyId:'ezpP6LGjecQW6zJC',
accessKeySecret:'1iqc1bkwZCVjK7oFUYdGm6e0xOL4mF',
bucketNameProd:'pisns-oss-res',
bucketNameDev:'pisns-oss-dev',
prodCDNURL:'http://fs.wxpai.cn/',
devCDNURL:'http://dev.fs.wxpai.cn/'
}
},
......@@ -29,6 +37,14 @@ var config = {
username: '',
password: '',
poolSize: 5
},
ossConfig:{
accessKeyId:'ezpP6LGjecQW6zJC',
accessKeySecret:'1iqc1bkwZCVjK7oFUYdGm6e0xOL4mF',
bucketNameProd:'pisns-oss-res',
bucketNameDev:'pisns-oss-dev',
prodCDNURL:'http://fs.wxpai.cn/',
devCDNURL:'http://dev.fs.wxpai.cn/'
}
},
......@@ -45,8 +61,17 @@ var config = {
password: 'future123456',
dbname: 'pisns-forum',
poolSize: 50
},
ossConfig:{
accessKeyId:'ezpP6LGjecQW6zJC',
accessKeySecret:'1iqc1bkwZCVjK7oFUYdGm6e0xOL4mF',
bucketNameProd:'pisns-oss-res',
bucketNameDev:'pisns-oss-dev',
prodCDNURL:'http://fs.wxpai.cn/',
devCDNURL:'http://dev.fs.wxpai.cn/'
}
}
};
module.exports = config[env];
\ No newline at end of file
......@@ -6,6 +6,7 @@ var bodyParser = require('body-parser');
var compress = require('compression');
var methodOverride = require('method-override');
var sessionPlugin = require('pisns-session-plugin');
var multiparty=require('connect-multiparty');
module.exports = function(app, config) {
......@@ -20,6 +21,7 @@ module.exports = function(app, config) {
}));
app.use(compress());
app.use(methodOverride());
app.use(multiparty());
sessionPlugin(app, {
storeType: 'memcache',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment