typescript处理角色认证以及路由的使用

import * as React from 'react';

import {

BrowserRouter,

Switch,

Route,

Redirect

} from 'react-router-dom';

import Login from '../src/component/login/Login';

import Experiment from './component/student/experiment/Experiment';

import ExpterimentDes from './component/student/experiment/ExpterimentDes'

import * as Loadable from "react-loadable";

 

import './app.css';


 

const RolesRoute = ({ component: Component, roles: roles, ...rest }: { component: any, roles: string[], path: string }) => (

<Route {...rest} render={(props) => {

let rolesStr = localStorage.getItem('roles'); // ["Admin","SuperAdmin"]

if(!rolesStr){

return <Redirect to='/' />

}

if (roles.indexOf(rolesStr) >= 0) {

return <Component {...props} />

} else {

return <Redirect to='/' />

}

}

} />

);

 

class App extends React.Component {

public render() {

return (

<div style={{ height: '100%' }}>

<BrowserRouter>

<div style={{ height: '100%' }}>

<Switch>

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

 

<RolesRoute

roles= {["ROLE_ADMIN"]}

path="/management"

component={

Loadable({

loader: () => import('../src/component/management/managementmenu/ManagementMenu'),

loading: () => <div>loading...</div>,

render(loaded, props) {

let Component = loaded.default;

return <Component {...props} />;

}

})} />

<RolesRoute roles= {["ROLE_STUDENT"]} path="/student/experiment/:id" component={Experiment} />

<RolesRoute roles= {["ROLE_STUDENT"]} path="/student/experimentdes/:id" component={ExpterimentDes} />

<RolesRoute

roles= {["ROLE_STUDENT"]}

path="/student"

component={

Loadable({

loader: () => import('../src/component/student/StudentMenu'),

loading: () => <div>loading...</div>,

render(loaded, props) {

let Component = loaded.default;

return <Component {...props} />;

}

})} />

 

<RolesRoute

roles= {["ROLE_TEACHER"]}

path="/teacher"

component={

Loadable({

loader: () => import('../src/component/teacher/teachermanagement/TeacherManagement'),

loading: () => <div>loading...</div>,

render(loaded, props) {

let Component = loaded.default;

return <Component {...props} />;

}

})} />

</Switch>

</div>

</BrowserRouter>

</div>

);

}

}

 

export default App;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值