Уровень безопасности доступа nodejs и паспорт - PullRequest
0 голосов
/ 02 июня 2018

В настоящее время я делаю систему 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);

IЯ не уверен, стоит ли мне добавлять дополнительную схему для прав администратора или как предоставить обычному пользователю такой тип доступа.

Теперь для моих маршрутов я хочу пользователя (Сотрудник) и Администраторачтобы увидеть почти то же самое представление, за исключением того, что менеджер будет иметь некоторые дополнительные ссылки, которые позволят ему видеть всех пользователей, удалять их, изменять временные карты и т. д.

на данный момент вот как выглядят мои маршруты:

//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 голосов
/ 02 июня 2018

Для первого вопроса я думаю, что это только бизнес-логика, поэтому зависит от вас, что вы хотите.Для опыта я предпочитаю первый способ в случае небольших проектов, потому что это быстрее реализовать (показать / скрыть элемент той же страницы), для сложных проектов может быть полезно сделать также другую страницу только для администратора.

Для второго запроса вы можете просто поставить условие, предположив, что, как и в вашем примере, вы передаете пользователя ejs.

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