首页 > 编程 > JavaScript > 正文

react实现菜单权限控制的方法

2019-11-19 14:45:14
字体:
来源:转载
供稿:网友

通常公司的后台管理系统都需要权限控制,即不同的角色用户看到不同的菜单,如下图:

下面,通过react实现这样的后台管理系统(脚手架),功能简介:

1.顶部的菜单项根据用户的角色动态生成。

2.侧边测菜单项根据已选的顶部菜单动态生成。

直接上代码

路由配置:

export default (  <Route path="/" component={App}>    <IndexRoute component={EmployeeList}/>    <Route path="/employee" component={Employee}>      <IndexRoute component={EmployeeList}/>      <Route path="/employee/list" component={EmployeeList}/>      <Route path="/employee/detail/:id" component={EmployeeDetail}/>    </Route>    <Route path="/goods" component={Goods}>      <IndexRoute component={GoodsList}/>      <Route path="/goods/list" component={GoodsList}/>      <Route path="/goods/detail/:id" component={GoodsDetail}/>    </Route>  </Route>)

顶部菜单项单独成了一个组件:

// 动态数据import React, { Component } from 'react'import { Link } from 'react-router' // 引入Link处理导航跳转import { connect } from 'react-redux'import { fetchPostsIfNeeded, updateSubMenuWhenClick } from '../actions/count'import { Menu } from 'antd';class TopMenu extends Component {  constructor(props){    super(props);    this.handleMenuClick = this.handleMenuClick.bind(this);  }  handleMenuClick(e){    // console.log(e.item.props['data-menukey']);    const { updateSubMenuWhenClick } = this.props    updateSubMenuWhenClick(true, e.item.props['data-menukey'])  }  componentWillMount() {  }  componentDidMount() {    const { fetchPostsIfNeeded } = this.props    fetchPostsIfNeeded()  }  render() {    const { menuList, fetchPostsIfNeeded } = this.props    if(menuList.length != 0) {      fetchPostsIfNeeded(true, menuList[0].key)    }    return (      <Menu        theme="dark"        mode="horizontal"        defaultSelectedKeys={['0']}        style={{ lineHeight: '64px' }}        onClick={this.handleMenuClick}      >      {        menuList.map((e, index) =>           <Menu.Item key={index} data-menukey={e.key} >            <Link to={{ pathname: e.url }} >{e.name}</Link>          </Menu.Item>        )      }      </Menu>    )  }}const getList = state => {  return {    menuList: state.update.menuList  }}export default connect(  getList,   { fetchPostsIfNeeded, updateSubMenuWhenClick })(TopMenu)

在render函数中,如果动态生成的顶部菜单数据长度不为0,则根据顶部菜单的key动态生成侧边菜单项。

const { menuList, fetchPostsIfNeeded } = this.props    if(menuList.length != 0) {      fetchPostsIfNeeded(true, menuList[0].key)    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表