普通用户和管理员的区别空通过在数据库中增加一个字段实现,给每个用户设置一个字段为idAdmn,如果该用户为管理员,则值为true,否则为false;
当用户登录后返回的userInfo存入cookie,处于安全性考虑,不含isAdmin字段,而是通过该用户id查询该用户是否是管理员,再将其返回给前端模板;前端模板通过判断该值展示对应的信息
1.给数据库增加字段isAdmin
/schemas/users.js:
//定义数据库表存储结构
//引入moogoose模块操作数据库
var mongoose = require('mongoose');
//定义用户表结构(字段和类型),并暴露出去
module.exports = new mongoose.Schema({
username:String,//用户名
password:String,//密码
isAdmin: {
type: Boolean,
default:false
}
})
2.根据cookie中的id判断用户类型
在app.js加载数据库模型类
var User = require('./models/User');
根据cookie中的信息查询用户类型
app.use(function(req,res,next){
req.cookies = new Cookies(req,res); //调用req的cookies方法把Cookies加载到req对象里面
req.userInfo = {}; //定义一个全局访问对象
//如果浏览器请求有cookie信息,尝试解析cookie
if(req.cookies.get('userInfo')){
try{
req.userInfo = JSON.parse(req.cookies.get('userInfo'));
//获取当前用户登录的类型,是否是管理员
User.findById(req.userInfo._id).then(function(userInfo){
req.userInfo.isAdmin = Boolean(userInfo.isAdmin);
next();
})
}catch(e){
next();
}
}else{
next();
}
})
3.前端模板根据isAdmin展示不同信息
修改index.html欢迎面板代码:
<div class="showInfo">
<p class="infoTitle">用户信息</p>
<div class="name">{{userInfo.username}}
</div>
{% if userInfo.isAdmin %}
<div class="info">你好管理员,欢迎来到博客
<a href="/admin">进入管理</a>
</div>
{% else %}
<div class="info">
你好,欢迎来到博客
</div>
{% endif %}
<button class="logout">退出</button>
</div>
分享源码:https://github.com/RidingACodeToStray/Nodejs_blog