From a175308b524f5429dff1b21f35f8af54f663d09f Mon Sep 17 00:00:00 2001 From: OldHawk Date: Thu, 14 Sep 2017 15:18:14 +0800 Subject: [PATCH] feat(users): add fields 'isVip, isOper, isAdmin' to model user --- config/lib/socket.io.js | 20 ----- .../announces.server.controller.js | 16 ---- .../controllers/forums.server.controller.js | 6 +- .../client/views/movie-list.client.view.html | 1 + .../completes.server.controller.js | 2 +- .../users/server/models/user.server.model.js | 80 +++++++++++++------ 6 files changed, 59 insertions(+), 66 deletions(-) diff --git a/config/lib/socket.io.js b/config/lib/socket.io.js index 64bc1112..d4c28b87 100644 --- a/config/lib/socket.io.js +++ b/config/lib/socket.io.js @@ -102,9 +102,6 @@ module.exports = function (app, db) { var logined = false; var banned = false; - //init user - initUser(socket.request.user); - // check user already login io.chatClients.forEach(function (s) { if (s.request.user.username === socket.request.user.username) { @@ -144,23 +141,6 @@ module.exports = function (app, db) { }); }); - // init user isOper/isAdmin/isVip - function initUser(user) { - user.isVip = false; - - if (!user.vip_start_at || !user.vip_end_at) { - user.isVip = false; - } else if (moment(Date.now()) > moment(user.vip_end_at)) { - user.isVip = false; - } else { - user.isVip = true; - } - - user.isOper = (user.roles[0] === 'oper' || user.roles[0] === 'admin'); - user.isAdmin = (user.roles[0] === 'admin'); - - } - // Add an event listener to the 'connection' event io.on('connection', function (socket) { config.files.server.sockets.forEach(function (socketConfiguration) { diff --git a/modules/announce/server/controllers/announces.server.controller.js b/modules/announce/server/controllers/announces.server.controller.js index 30c06ba8..b38f8e04 100644 --- a/modules/announce/server/controllers/announces.server.controller.js +++ b/modules/announce/server/controllers/announces.server.controller.js @@ -824,21 +824,6 @@ exports.announce = function (req, res) { } }; -/** - * get user isVip status - * @param u - * @returns {boolean} - */ -function isVip(u) { - if (!u.vip_start_at || !u.vip_end_at) { - return false; - } else if (moment(Date.now()) > moment(u.vip_end_at)) { - return false; - } else { - return true; - } -} - /** * userByPasskey * @param req @@ -852,7 +837,6 @@ exports.userByPasskey = function (req, res, next, pk) { .exec(function (err, u) { if (u) { req.passkeyuser = u; - req.passkeyuser.isVip = isVip(u); } else { req.passkeyuser = undefined; } diff --git a/modules/forums/server/controllers/forums.server.controller.js b/modules/forums/server/controllers/forums.server.controller.js index 10245f1c..fb3c4419 100644 --- a/modules/forums/server/controllers/forums.server.controller.js +++ b/modules/forums/server/controllers/forums.server.controller.js @@ -496,7 +496,7 @@ exports.toggleTopicTopStatus = function (req, res) { exports.toggleTopicGlobalStatus = function (req, res) { var topic = req.topic; - if (!req.user.toJSON().isOper && !req.user.toJSON().isAdmin) { + if (!req.user.isOper && !req.user.isAdmin) { return res.status(403).json({ message: 'ERROR: User is not authorized' }); @@ -977,9 +977,9 @@ exports.topicById = function (req, res, next, id) { * @returns {boolean} */ function canEdit(u, f) { - if (u.toJSON().isOper) { + if (u.isOper) { return true; - } else if (u.toJSON().isAdmin) { + } else if (u.isAdmin) { return true; } else if (isModerator(f)) { return true; diff --git a/modules/torrents/client/views/movie-list.client.view.html b/modules/torrents/client/views/movie-list.client.view.html index 72d396b0..bce0d967 100644 --- a/modules/torrents/client/views/movie-list.client.view.html +++ b/modules/torrents/client/views/movie-list.client.view.html @@ -241,6 +241,7 @@ + diff --git a/modules/torrents/server/controllers/completes.server.controller.js b/modules/torrents/server/controllers/completes.server.controller.js index 5a9e0447..90cec51c 100644 --- a/modules/torrents/server/controllers/completes.server.controller.js +++ b/modules/torrents/server/controllers/completes.server.controller.js @@ -24,7 +24,7 @@ var traceConfig = config.meanTorrentConfig.trace; */ exports.removeWarning = function (req, res) { var comp = req.complate; - var user = req.user ? req.user.toJSON() : {}; //fill isVip, isAdmin, isOper in toJSON() + var user = req.user; if (user.isOper) { comp.hnr_warning = false; diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index f7821ded..4fd9a5a2 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -119,6 +119,14 @@ var UserSchema = new Schema({ default: ['user'], required: 'Please provide at least one role' }, + isOper: { + type: Boolean, + default: false + }, + isAdmin: { + type: Boolean, + default: false + }, status: { type: String, default: 'normal' @@ -131,6 +139,10 @@ var UserSchema = new Schema({ type: Date, default: '' }, + isVip: { + type: Boolean, + default: false + }, score: { type: Number, default: 0 @@ -201,29 +213,6 @@ var UserSchema = new Schema({ } }); -/** - * overwrite toJSON - */ -UserSchema.methods.toJSON = function (options) { - var document = this.toObject(options); - document.isVip = false; - - if (!document.vip_start_at || !document.vip_end_at) { - document.isVip = false; - } else if (moment(Date.now()) > moment(document.vip_end_at)) { - document.isVip = false; - } else { - document.isVip = true; - } - - if (document.roles) { - document.isOper = (document.roles[0] === 'oper' || document.roles[0] === 'admin'); - document.isAdmin = (document.roles[0] === 'admin'); - } - - return document; -}; - /** * Hook a pre save method to hash the password */ @@ -236,6 +225,8 @@ UserSchema.pre('save', function (next) { } countRatio(this); + updateVipFlag(this); + updateOperAdminFlag(this); this.constructor.count(function (err, count) { if (err) { @@ -255,9 +246,16 @@ UserSchema.pre('save', function (next) { */ UserSchema.pre('update', function (next) { countRatio(this); + updateVipFlag(this); + updateOperAdminFlag(this); + next(); }); +/** + * countRatio + * @param user + */ function countRatio(user) { if (user.uploaded > 0 && user.downloaded === 0) { user.ratio = -1; @@ -268,6 +266,36 @@ function countRatio(user) { } } +/** + * updateVipFlag + * @param user + */ +function updateVipFlag(user) { + user.isVip = false; + + if (!user.vip_start_at || !user.vip_end_at) { + user.isVip = false; + } else if (moment(Date.now()) > moment(user.vip_end_at)) { + user.isVip = false; + } else { + user.isVip = true; + } +} + +/** + * updateOperAdminFlag + * @param user + */ +function updateOperAdminFlag(user) { + user.isOper = false; + user.isAdmin = false; + + if (user.roles) { + user.isOper = (user.roles[0] === 'oper' || user.roles[0] === 'admin'); + user.isAdmin = (user.roles[0] === 'admin'); + } +} + /** * Hook a pre validate method to test the local password */ @@ -442,9 +470,9 @@ UserSchema.statics.seed = seed; mongoose.model('User', UserSchema); /** -* Seeds the User collection with document (User) -* and provided options. -*/ + * Seeds the User collection with document (User) + * and provided options. + */ function seed(doc, options) { var User = mongoose.model('User');