当前位置:首页 > 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)存储用户权限信息,在组件内进行校验。

react实现权限控制

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

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

API请求拦截

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

react实现权限控制

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 的基础知识 React 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react 如何调试

react 如何调试

调试 React 应用的方法 使用 React Developer Tools 安装 Chrome 或 Firefox 的 React Developer Tools 扩展,可以检查组件树、状态和 p…

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

react如何折叠

react如何折叠

在 React 中实现折叠功能 使用 useState 管理折叠状态 通过 useState 定义一个状态变量来控制折叠面板的显示与隐藏。例如: const [isCollapsed, setIsC…