当前位置:首页 > 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 中,可以通过封装路由组件实现鉴权。使用 react-router-dom 检查用户是否登录,未登录则跳转至登录页。 import { Rou…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元…

react如何销毁

react如何销毁

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

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Contex…