reactjs - 如何在React中进行基于角色的访问路由

标签 reactjs react-router-dom

我想将某些页面的权限授予用户,将更多页面的访问权限授予管理员,将所有页面的访问权限授予管理员。

如果用户管理员登录

const role = 'admin'
{role === 'admin' ? (
    <>    
      <Route path='/' component={Home} />
      <Route path='/products/' exact={true} component={Products} />
 <Route path='/products-edit' exact={true} component={ProductsEdit} />
<Route path='/all-products' exact={true} component={AllProducts} />
</>
)}

如果用户管理员已登录

{role === 'manager' ? (
    <>    
      <Route path='/' component={Home} />
      <Route path='/products/' exact={true} component={Products} />
 <Route path='/products-edit' exact={true} component={ProductsEdit} />
</>
)}

如果用户登录

{role === 'user' ? (
    <>    
      <Route path='/' component={Home} />
      <Route path='/products/' exact={true} component={Products} />
</>
)}

最佳答案

您可以创建一个特殊的 RoleRoute 组件,该组件采用有权访问该路由的 roles 数组,并根据当前的 role 进行检查> 用户拥有的值(value)。如果用户具有适当的角色,那么他们可以访问该路由,否则呈现路由之外的重定向。

示例:

const RoleRoute = ({ role, roles = [], ...props }) => {
  return !roles.length || roles.includes(role) ? (
    <Route {...props} />
  ) : (
    <Redirect to=".." />
  );
};

...

<Switch>
  <RoleRoute
    path="/products"
    role={role}
    roles={["admin", "manager", "user"]}
    component={Products}
  />
  <RoleRoute
    path="/products-edit"
    role={role}
    roles={["admin", "manager"]}
    component={ProductsEdit}
  />
  <RoleRoute
    path="/all-products"
    role={role}
    roles={["admin"]}
    component={AllProducts}
  />
  <Route path="/" component={Home} />
  <Redirect to="/" />
</Switch>

演示

Edit how-to-do-role-based-access-routing-in-react

关于reactjs - 如何在React中进行基于角色的访问路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73578068/

相关文章:

javascript - 在 React Router 上,如何保持登录状态甚至页面刷新?

reactjs - 如何在有状态组件的 React Router 5.1.2 中使用 History.push ('path' )?

javascript - 编译失败。找不到模块 : Can't resolve 'react-router-dom'

reactjs - 相对于箭头键旋转图像 react js

javascript - 嵌套的 React/Relay 组件没有收到 Prop

javascript - 在 React 中每 x 个项目插入一个图像

reactjs - 在我的案例中执行 React Router 历史推送时如何滚动到页面

javascript - 如何使用 react 在两个 css 类之间切换

javascript - React hooks - useState() 中的状态在路由更改时不会重置

reactjs - 如果url无效如何重定向到主页