安全级别访问nodejs和护照

时间:2018-06-02 07:15:26

标签: node.js express passport.js ejs passport-local

我目前正在制作一个Timecard系统,供员工在我工作的工作中使用(只是为了让事情变得不那么混乱),我希望有经常的用户和经理。我想要实现的基本结构是Schemas:

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)要显示什么以及不显示什么。

我很感激,谢谢!

1 个答案:

答案 0 :(得分:1)

对于第一个问题,我认为这只是一个商业逻辑,所以依赖于你想要的东西。对于经验,我更喜欢小项目的第一种方式因为实现起来更快(显示/隐藏相同页面的元素),对于复杂的项目可以是有用的仅针对管理员的不同页面

对于第二个问题,您可以简单地设置一个条件,假设您将示例传递给ejs。

<% if (user && user.isManage) { %>
  <button>Admin button</button>
<% } %>