@filisonov

Как скрыть админпанель от пользователя?

Задача состоит в следующем на сайте при регистрации пользователя в базу данных записываю следующее:
файл постмодель
const UserSchema = new Schema({

    firstName: {
        type: String,
        required: true
    },

    lastName: {
        type: String,
        required: true
    },

    email: {
        type: String,
        required: true
    },

    password: {
        type: String,
        required: true
    },
    role: {
        type: String,
        default: 'User'
    }


});


Далее в глобальную переменную записываю данные авторизованного пользователя:
res.locals.user = req.user || null;

Саму админ панель скрываю от пользователя с параметром отличным от role: "Admin" следующим образом:
isUserAuthenticated: (req, res, next) => {
        if (req.isAuthenticated()){
            if(req.user.role === 'Admin'){
                next();//если оказался админом то редиректет в админпанель после авторизации
            }
            else{
                res.redirect('/');//если оказался просто юзером то получаешь редирект на главную после авторизации
            }
        }else{
            res.redirect('/');//
        }
    }


Как написать проверку для шаблонизатора hendlebars, при условии все юзеры отличные от role:Admin, не должны видеть ссылку для входа в адими панель, такая конструкция не работает:

{{#if user.role }}
                   
                    <li class="nav-item">
                        <a class="nav-link" href="/admin">Admin</a>
                    </li>
                {{else}}
                    <li class="nav-item">
                        <a class="nav-link" href="/login">Login</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="/register">Register</a>
                    </li>
                {{/if}}
  • Вопрос задан
  • 306 просмотров
Пригласить эксперта
Ответы на вопрос 1
IvanBlacky
@IvanBlacky
back-end разработчик
У handlebars конструкция #if проверяет на "существование" или не отрицание значения в переменной. Как вариант, можно в объект user дообавить поле isAdmin с булевым значением, а далее в handlebars проверять именно это поле. Как вариант:
{{#if user.isAdmin }}
                   
                    <li class="nav-item">
                        <a class="nav-link" href="/admin">Admin</a>
                    </li>
                {{else}}
                    <li class="nav-item">
                        <a class="nav-link" href="/login">Login</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="/register">Register</a>
                    </li>
                {{/if}}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы