第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何防止某些用戶訪問 React 中的路由和任何子路由?

如何防止某些用戶訪問 React 中的路由和任何子路由?

千萬里不及你 2022-01-07 19:23:05
防止特定用戶訪問路由及其任何子路由的最佳方法是react-router什么?例如,我有一個(gè)途徑/admin/,它有許多其他的子路徑一樣/admin/create-user,/admin/settings等等。是否有另一種方法可以阻止用戶訪問這些路由而不在每個(gè)組件上指示某些條件?if (user.role.name !== "Admin") {    return (      <div className="error-page">        <h1>Sorry, you don't have rights to access this page.</h1>     </div>    );  } else {  // render admin component}
查看完整描述

2 回答

?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

您需要使用自定義的 ProtectedRoute 組件,并將所需的角色傳遞給此組件,無論用戶是否可以轉(zhuǎn)到該路由。


代碼沙盒:


https://codesandbox.io/s/so-protect-route-roles-z7j3l


ProtectedRoute.js:


import React from "react";

import { Route, Redirect } from "react-router-dom";

import {user} from "./AuthService";


export const ProtectedRoute = ({

  path,

  component: Component,

  render,

  requiredRole,

  ...rest

}) => {


  return (

    <Route

      path={path}

      {...rest}

      render={props => {

        if (user.role.name === requiredRole) {

          return Component ? <Component {...props} /> : render(props);

        } else {

          return <Redirect to="/error" />;

        }

      }}

    />

  );

};


export default ProtectedRoute;

AuthService 就是這樣,您需要對(duì)其進(jìn)行修改以滿足您的要求。


AuthService.js(您可以將角色更改為管理員,以使用它)


export const user = {

  name: "User 1",

  role:{

    name: "User"

  }

}

App.js(請(qǐng)注意,我們使用了 ProtectedRoute 組件,并將所需的角色傳遞給它)


import React, { Component } from "react";

import { BrowserRouter as Router, Link, Route } from "react-router-dom";

import Home from "./Home";

import User from "./User";

import Admin from "./Admin";

import Login from "./Login";

import ErrorPage from "./ErrorPage";

import ProtectedRoute from "./ProtectedRoute";


class App extends Component {

  render() {

    return (

      <Router>

        <div>

          <ul>

            <li>

              <Link to="/">Home</Link>

            </li>

            <li>

              <Link to="/user">User</Link>

            </li>

            <li>

              <Link to="/admin">Admin</Link>

            </li>

          </ul>


          <Route exact path="/" component={Home} />

          <Route exact path="/login" component={Login} />

          <Route exact path="/error" component={ErrorPage} />

          <ProtectedRoute path="/user" component={User} requiredRole="User" />

          <ProtectedRoute path="/admin" component={Admin} requiredRole="Admin" />

        </div>

      </Router>

    );

  }

}


export default App;


使用此設(shè)置,沒有管理員角色的用戶無法導(dǎo)航到管理員及其嵌套路由。


查看完整回答
反對(duì) 回復(fù) 2022-01-07
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

使用如圖所示的 Route 組件


if(user.role.name !== "Admin") {

   <Route path="/admin" component={Admin} />

} else {

   <Redirect to="/" />

}

如果管理員顯示組件,否則重定向到主頁。


查看完整回答
反對(duì) 回復(fù) 2022-01-07
  • 2 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)