#javascript #node.js #reactjs #mern #rbac
Вопрос:
Я хочу реализовать RBAC в своем проекте React,и здесь у меня другая роль, такая как АДМИНИСТРАТОР, СУПЕРАДМИН и т. Д., И я сохраняю эту роль пользователя в localStorage и показываю информацию в соответствии с ролью пользователя, так что на самом деле происходит, что, если пользователь является администратором, у этого хранилища в localStorage есть доступ только к ограниченным вещам, но когда он меняет свою роль на суперадмина из localstorage из разработчика или консоли, он получает весь доступ суперадмина, что я могу сделать?
Ответ №1:
Вы можете создать Middleware
его для каждого маршрута passed
или render
из этого промежуточного программного обеспечения, и это лучший способ использовать вызов API в вашем промежуточном программном обеспечении для проверки ролей.
Пример :
Частный маршрут.tsx
import React, { useContext, useEffect } from 'react'
import { Redirect, Route } from 'react-router-dom'
export const PrivateRoute = props => {
// Get User info from local storage
const userData = localStorage.getItem('user')
const userRole = userData?.role;
useEffect(() => {
// do something here for async check
},[])
const hasPermission = useMemo(() => {
// some condition checks for roles access for perticluar module
return ...
}, [userRole]);
if (hasPermission) {
return <Route {...props} />
}
return <Redirect to={'Some Path'} />
};
Комментарии:
1. Что на самом деле происходит, что я хочу отобразить пользовательский интерфейс или панель навигации в соответствии с ролью, которая появилась при входе пользователя в систему, так где мне хранить ту роль, которая появилась при входе пользователя, Если я сохраню эту вещь в файле cookie сеанса или локальном хранилище, чем пользователь может изменить ее доступ к панели навигации, которую я хочу показать только суперадминистратору.
2. Да, поэтому вам нужно проверить этот материал в промежуточном программном обеспечении и сохранить его в своем состоянии или глобальном состоянии вместо локального хранилища.
Ответ №2:
Дело в том, что обработки такого рода авторизации недостаточно на стороне интерфейса. Вы можете попросить свой сервер сообщить вам, является ли пользователь АДМИНИСТРАТОРОМ, СУПЕРАДМИНОМ или кем-то еще. Затем вы можете сохранить этот статус аутентификации в управлении состоянием, чтобы после этого вы могли легко получить к нему доступ.
Для реализации различных ситуаций вы можете использовать охрану некоторых маршрутов или компоненты визуализации условно, учитывая, к какому типу относится пользователь.
На мой взгляд, HOCs
(упаковка компонентов с ними) amp; conditional rendering
может помочь вам с RBAC.
Комментарии:
1. Да, я получаю роль, когда пользователь вошел в систему, у вас есть какие-либо идеи о том, как сохранить эту роль в состоянии, что на самом деле происходит на странице, обновление состояния ясно, поэтому я не могу их реализовать.
2. Если вы используете redux, вы можете использовать
redux-persist
. В противном случае используйте локальное хранилище для сохранения роли пользователя или переопределения роли пользователя при каждом подключении компонента приложения.