OFF
OFF

Reputation: 1

Express-Handlebars i need a way to create a different navbar if i have an "admin" or "employee" account

I need a way to use a global variable "res.locals.user = req.user || null;" to differentiate between an "admin" and an "employee" account, the resulting json at login gives the following fields:

{ _id: new ObjectId('66838f5bd6db20159e80f3ce'), name: 'Cameron', email: '[email protected]', password: '$2a$10$vke8qHo5u5T5zpZQRHcosO/hnsR4skEqAqPB3IrsnTf9/bEOdeNT2', usertype: 'employee', createdAt: 2024-07-02T05:25:47.595Z, updatedAt: 2024-07-02T05:25:47.595Z, __v: 0 }

I need to use the variable "usertype" to be able to use one navbar or another.

my Server.js

const express = require('express');
const exphbs = require('express-handlebars');
const path = require('path');
const morgan = require('morgan')
const flash = require('connect-flash')
const session = require('express-session')
const passport = require('passport')

// Initializations
const app = express();
require('./config/passport');

//Settings
app.set('port', process.env.PORT || 4000);
app.set('views', path.join(__dirname, 'views'));
app.engine('.hbs', exphbs.engine({
    defaultLayout: 'main',
    layoutsDir: path.join(app.get('views'), 'layouts'),
    partialsDir: path.join(app.get('views'), 'partials'),
    extname: '.hbs'
    
}));
app.set('view engine', '.hbs');

//Middlewares
app.use(morgan('dev')); 
app.use(express.urlencoded({extended: false}));
app.use(session({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());




//Global Variables
app.use((req, res, next) =>{
    res.locals.success_msg = req.flash('success_msg');
    res.locals.error_msg = req.flash('error_msg');
    res.locals.error = req.flash('error');
    res.locals.user = req.user || null;
    //res.locals.admin = req.user.usertype || null;
    next();
});


//Routes
app.use(require('./routes/index_routes'));
app.use(require('./routes/vac_routes'));
app.use(require('./routes/users_routes'));

//Static Files
app.use(express.static(path.join(__dirname, 'public')));


module.exports = app;

my navigation.hbs

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <div class="container">
        <a class="navbar-brand" href="/">Vac App</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
            aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>

        {{#if user}}
        
        <ul class="navbar-nav">
            <li class="nav-item active">
                <a class="nav-link" href="/view"> name {{user}} <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="/view">Vacation Days <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="/dashboard">Dashboard <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="/NewEmployee">Register <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="/users/logout">Logout <span class="sr-only">(current)</span></a>
            </li>
        </ul>
        {{else}}
        <div class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav ml-auto">
                <li class="nav-item">
                    <a href="/users/signup" class="nav-link">SignUp</a>
                </li>
                <li class="nav-item">
                    <a href="/users/signin" class="nav-link">SignIn</a>
                </li>
            </ul>
        </div>
        {{/if}}


    </div>
</nav>

I need a way to my front end read my "user.usertype" information to know if it is an admin or not

enter image description here

Upvotes: 0

Views: 34

Answers (0)

Related Questions