javascript - 如何在 React 中实现 RBAC?
问题描述
我想在我的 React 项目中实现 RBAC,在这里我有不同的角色,比如 ADMIN、SUPERADMIN 等,我将该用户角色存储在 LocalStorage 中并根据用户角色显示信息,所以如果用户是存储在localStorage 只能访问有限的东西,但是当他从 dev 或控制台的 localstorage 将其角色更改为 SuperAdmin 时,他获得了 SuperAdmin 的所有访问权限,我能做什么?
解决方案
您可以创建一个Middleware
,以便每条路由passed
或render
从该中间件创建一个,这是一种更好的方法,您可以在中间件中使用 API 调用来检查角色。
例子 :
PrivateRoute.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'} />
};
推荐阅读
- react-native - 如何修复“ReactNative:无法运行程序”错误
- javascript - AJAX 上传后 $_FILES 为空
- r - 在 mac 时区安装 lightgbm_r 时发生错误
- adobe-indesign - 在 Extendscript Indesign 中重新排序 XML 元素
- laravel - 部署 Laravel 代码时出错
- mariadb - CentOS 7 MariaDB 10 远程连接设置
- docker - 跨 Docker 容器共享内存:'--ipc=host' vs. '--ipc=shareable'
- json - 使用 jq 添加 JSON 对象时如何防止转义?
- java - java中的正则表达式匹配而不使用正则表达式
- bash - 当字符串包含 * 字符时,如何将 bash 字符串标记为数组?