【发布时间】:2018-11-12 05:57:10
【问题描述】:
我目前正在制作一个 Timecard 系统,供员工在我工作的工作中使用(只是为了让事情变得不那么混乱),我希望有固定的用户和经理。我想要实现的基本结构是模式:
User
---name
---password
---isClockedIn
---phoneNumber
---isManager
--if isManager == true
--deleteUser
--addUser
--etc
现在,我拥有的当前用户架构是这样的:
var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");
var UserSchema = mongoose.Schema({
username: String,
password: String,
first_name: String,
middle_initial: String,
last_name: String,
phone: Number,
isManager: Boolean,
isLoggedIn: Boolean,
points_accrued: Number
});
UserSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", UserSchema);
我不确定是否应该为管理员权限添加额外的架构,或者真的如何为普通用户提供这种类型的访问权限。
现在对于我的路线,我希望用户(员工)和管理员看到几乎相同的视图,除了经理将有一些额外的链接允许他查看所有用户、删除它们、更改考勤卡等。
现在这就是我的路线的样子:
//INDEX SHOW USER INFO
router.get("/", middleware.isLoggedIn, middleware.isManager, function(req, res){
User.find({}, function(err, currentUser){
if(err){
console.log("error occured");
console.log(err);
} else {
res.render("users/index", {user: currentUser});
}
});
});
然后我的中间件将如下所示:
middlewareObj.isManager = function(req, res, next){
if(req.isAuthenticated() && req.isManager === true){
//Load Page for admins view example: see all employees clocked in and admins timesheet
return next();
} else {
//Load Page to only show current Users timesheet
return next();
}
现在这引出了一个问题,如果用户和管理员的第一页相同(例如显示该特定员工的通用时间信息)以及如果用户是管理员有一个链接显示只有他们可以访问以进行任何低级更改,或者让管理员在其主页上查看所有这些数据而不单击其他链接? 更进一步,我怎样才能让我的中间件告诉路由,然后路由告诉 html(在我的例子中是 ejs)显示什么,不显示什么。
我很感激,谢谢!
【问题讨论】:
标签: node.js express passport.js ejs passport-local