【问题标题】:Security level access nodejs and passport安全级别访问nodejs和passport
【发布时间】: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


    【解决方案1】:

    对于第一个问题,我认为这只是一个业务逻辑,所以取决于你想要什么。对于经验,我更喜欢小项目的第一种方式,因为实施起来更快(显示/隐藏同一页面的元素),对于复杂的项目可能很有用只为管理员创建一个不同的页面.

    对于第二个问题,您可以简单地提出一个条件,假设像您的示例一样,您将用户传递给 ejs。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2016-12-27
      • 2020-10-31
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多