当前位置:首页 > React

react实现权限控制

2026-01-26 19:57:47React

路由级权限控制

使用 react-router-domRoutes 和自定义组件实现路由拦截。通过高阶组件或自定义 Route 组件包裹需鉴权的路由,检查用户权限后决定是否渲染目标组件或跳转登录页。

import { Navigate, Outlet } from 'react-router-dom';

const PrivateRoute = ({ allowedRoles }) => {
  const userRole = getUserRole(); // 获取用户角色
  return allowedRoles.includes(userRole) 
    ? <Outlet /> 
    : <Navigate to="/login" replace />;
};

// 使用示例
<Route element={<PrivateRoute allowedRoles={['admin']} />}>
  <Route path="/admin" element={<AdminPage />} />
</Route>

组件级权限控制

通过条件渲染或自定义封装组件控制UI元素的显隐。结合全局状态(如Redux或Context)存储用户权限信息,在组件内进行校验。

const AuthButton = ({ requiredPermission }) => {
  const { permissions } = useAuth(); // 从全局状态获取权限
  return permissions.includes(requiredPermission) 
    ? <button>敏感操作</button> 
    : null;
};

// 使用示例
<AuthButton requiredPermission="delete_user" />

API请求拦截

在axios拦截器中注入权限令牌(如JWT),并在请求前校验权限。若令牌失效或无权限,拦截请求并跳转错误页。

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (!token || !validateToken(token)) {
    redirectToErrorPage();
    return Promise.reject('无权限');
  }
  config.headers.Authorization = `Bearer ${token}`;
  return config;
});

权限数据管理

采用树形结构或位运算存储权限码,提升校验效率。例如:

  • 角色-权限映射表:通过对象关联角色与可访问的功能列表。
  • 二进制权限码:每个权限对应一个二进制位,通过按位与运算快速校验。
const permissions = {
  admin: ['read', 'write', 'delete'],
  user: ['read']
};

// 二进制权限示例
const READ = 1 << 0; // 1
const WRITE = 1 << 1; // 2
const userPermissions = READ | WRITE; // 3
const canWrite = (userPermissions & WRITE) === WRITE; // true

动态菜单渲染

根据用户权限过滤导航菜单项,仅显示有权限访问的条目。结合后端返回的权限列表或本地配置生成动态菜单。

const menuItems = [
  { path: '/dashboard', permission: 'view_dashboard' },
  { path: '/settings', permission: 'edit_settings' }
];

const DynamicMenu = () => {
  const { permissions } = useAuth();
  return menuItems.filter(item => 
    permissions.includes(item.permission)
  ).map(item => <MenuItem path={item.path} />);
};

react实现权限控制

标签: 权限react
分享给朋友:

相关文章

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 项目依赖 Node.js 环境,需先安装 Node.js(自带 npm)。访问 Node.js 官网 下载 LTS 版本,运行安装程序并完成配置。安装后,…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyf…