前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录。最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star。


一、创建角色

  • 权限菜单设计:RBAC权限模型(详解链接)
  1. RBAC,即基于角色的访问控制(Role-Based Access Control),是优秀的权限控制模型
  2. 主要通过角色和权限建立管理,再赋予用户不同的角色,来实现权限控制的目标

      

  • 角色列表展示:对应Easy Mock数据接口/role/list

    {"code": 0,"list": {"item_list|7": [{"id|+1": 1,"role_name": /(管理人员)|(客服专员)|(财务专员)|(市场专员)|(人力专员)|(研发)|(测试)|(系统管理员)/,"status|0-1": 1,"authorize_user_name": "@cname","authorize_time": 1521270166000,"create_time": 1499305790000,"menus": ["/home", "/ui/buttons", "/ui/modals", "/ui/loadings", "/ui/notification", "/ui/messages", "/ui/tabs", "/ui/gallery", "/ui/carousel", "/ui"]}]},"page": 1,"page_size": 10,"total_count": 25,"page_count": 3
    }
    

  1. 调用封装好的axios.requestList()获取角色数据

    componentWillMount(){this.requestList();
    }requestList = ()=>{axios.requestList(this, '/role/list', {})
    }

  2. 使用封装好的ETable组件实现角色列表的展示

    <div className="content-wrap"><ETableupdateSelectedItem={Utils.updateSelectedItem.bind(this)}selectedRowKeys={this.state.selectedRowKeys}dataSource={this.state.list}columns={columns}/>
    </div>
    

  • 创建角色:Modal弹框中嵌入表单子组件

  1. 表单组件:RoleForm = Form.create({})(RoleForm)实现表单数据的双向绑定

    // 角色创建
    class RoleForm extends React.Component{render(){const { getFieldDecorator } = this.props.form;const formItemLayout = {labelCol: {span: 5},wrapperCol: {span: 16}};return (<Form layout="horizontal"><FormItem label="角色名称" {...formItemLayout}>{getFieldDecorator('role_name',{initialValue:''})(<Input type="text" placeholder="请输入角色名称"/>)}</FormItem><FormItem label="状态" {...formItemLayout}>{getFieldDecorator('state',{initialValue:1})(<Select><Option value={1}>开启</Option><Option value={0}>关闭</Option></Select>)}</FormItem></Form>);}
    }
    RoleForm = Form.create({})(RoleForm);

  2. Modal弹框中应用表单组件:通过wrappedComponentRef={(inst) => this.roleForm = inst }获取表单元素的数据对象

    <Modaltitle="创建角色"visible={this.state.isRoleVisible}onOk={this.handleRoleSubmit}onCancel={()=>{this.roleForm.props.form.resetFields();//表单重置this.setState({isRoleVisible:false})}}><RoleForm wrappedComponentRef={(inst) => this.roleForm = inst }/>
    </Modal>

  3. 点击【创建角色】按钮弹出弹框:给onClick事件绑定this.handleRole(),设置this.state.isRoleVisible为true

  4. 点击【OK】提交创建角色:给onOk事件绑定this.handleRoleSubmit()。①通过this.roleForm.props.form.getFieldsValue()获取表单的值,赋给params;②接口访问成功后,关闭弹框,刷新列表数据。

    // 角色提交
    handleRoleSubmit = ()=>{let data = this.roleForm.props.form.getFieldsValue(); //获取表单的值axios.ajax({url:'role/create', //Easy Mock中只有{"code": 0}data:{params:{...data}}}).then((res)=>{if(res.code === 0){this.setState({isRoleVisible:false   //关闭弹框})this.requestList();  //刷新列表数据}})
    }

      

二、设置权限

  • 设置权限表单组件 :AntD Tree树形结构组件的使用
  1. TreeNode树形节点:const TreeNode = Tree.TreeNode;
  2. 加载完整的权限列表:本地定义menuConfig.js权限列表文件,通过递归方法渲染TreeNode
    import menuConfig from '../../config/menuConfig'renderTreeNodes = (data,key='') => {return data.map((item) => {let parentKey = key+item.key;if (item.children) {return (<TreeNode title={item.title} key={parentKey} dataRef={item} className="op-role-tree">{this.renderTreeNodes(item.children,parentKey)}</TreeNode>);} else if (item.btnList) {return (<TreeNode title={item.title} key={parentKey} dataRef={item} className="op-role-tree">{ this.renderBtnTreedNode(item,parentKey) }</TreeNode>);}return <TreeNode {...item} />;});
    };renderBtnTreedNode = (menu,parentKey='')=> {const btnTreeNode = []menu.btnList.forEach((item)=> {// console.log(parentKey+'-btn-'+item.key);btnTreeNode.push(<TreeNode title={item.title} key={parentKey+'-btn-'+item.key} className="op-role-tree"/>);})return btnTreeNode;
    }<Tree checkabledefaultExpandAll><TreeNode title="平台权限" key="platform_all">{this.renderTreeNodes(menuConfig)}</TreeNode>
    </Tree>      

  • Modal弹框中应用表单组件:
  • 点击【设置权限】按钮弹出弹框:判断若没有this.state.selectedItem,提示需“选择”

    //权限设置
    handlePermission = ()=>{if (!this.state.selectedItem) {Modal.info({title: '信息',content: '请选择一个角色'})return;}this.setState({isPermVisible: true,detailInfo: this.state.selectedItem //角色详细信息});let menuList = this.state.selectedItem.menus; //角色权限this.setState({menuInfo:menuList})
    }  

  • 点击【OK】提交权限:给onOk事件绑定this.handlePermEditSubmit()

三、菜单调整

四、用户授权


注:项目来自慕课网

转载于:https://www.cnblogs.com/ljq66/p/10232666.html

【共享单车】—— React后台管理系统开发手记:权限设置和菜单调整(未完)...相关推荐

  1. 【开发篇】10分钟快速搭建React后台管理系统模板

    React后台管理系统模板 github 我又回来了!!!学完前端react,再学spring,这周或者下周写spring有关的!!! 一.准备React 1.建立react应用 npx create ...

  2. 视频教程-SSM后台管理系统开发实战-Java

    SSM后台管理系统开发实战 5年IT从业经验,目前职位是Java高级工程师.架构师,在gitchat发布有<SSM博客系统开发实战>达人课,CSDN博客专家,博客专栏作者,梦境网项目独立开 ...

  3. 【SpringBoot】33、SpringBoot+LayUI后台管理系统开发脚手架

    Asurplus-Vue:[SpringBoot]五十四.SpringBoot+VUE后台管理系统开发脚手架 本期给大家推荐我自己写一个开源项目:Asurplus-LayUI,本着减少大量重复开发工作 ...

  4. SSM后台管理系统开发实战

    一.简介: 通过这个课程带大家从零开发一款功能全面的后台管理系统,包括项目搭建.功能实现到最后的Linux系统部署全过程.本课程使用SpringMVC + Spring + Mybatis作为主体框架 ...

  5. 大事件后台管理系统开发实战(下)

    文章目录 续前篇:大事件后台管理系统开发实战(中) 1. 文章类别 1.1 点击编辑按钮展示修改文章分类的弹出层 1.2 为修改文章分类的弹出层填充表单数据 1.3 更新文章分类的数据 1.4 删除文 ...

  6. Vue 2.x 实战之后台管理系统开发(二)

    1. 导语 承接上文:Vue 2.x 实战之后台管理系统开发(一) 在上一篇文章中,我详细叙述了如何创建项目框架和引入各种后台常用插件,做好这些准备工作后,我们就可以着手进行页面的开发了.在开发过程中 ...

  7. 从头开始react后台管理系统-安装ant-Design

    从头开始react后台管理系统-安装ant-Design introduce 在做微信小程序, 想着顺便做一个管理系统的 随便扯扯 我是个菜鸡,很菜很菜的菜鸡,春招各家凉,现在还是0offer.心情很 ...

  8. Thinkphp实战教程后台管理系统开发

    目录 ├─Thinkphp5 后台管理开发.png ├─Thinkphp5 后台管理开发.xmind ├─Thinkphp实战教程后台管理系统开发-1.课程介绍及大纲.mp4 ├─Thinkphp实战 ...

  9. React后台管理系统-品类选择器二级联动组件

    React后台管理系统-品类选择器二级联动组件 品类选择器二级联动 posted on 2018-06-26 22:21 gisery 阅读( ...) 评论( ...) 编辑 收藏

最新文章

  1. C++知识点37——拷贝构造函数
  2. DPDK — PDUMP 抓包工具
  3. Boost.MultiIndex 复合键的例子
  4. .NET Core 3.0之深入源码理解Startup的注册及运行
  5. opensource项目_最佳Opensource.com:政府
  6. 违法收集使用个人信息 抖音、快手、猎聘等105款App被点名
  7. 通过yum安装php7
  8. vmware vcenter orchestrator configuration提示“用户名密码错误或登录失败超过次数被锁定”...
  9. 单体应用架构和微服务架构的区别
  10. 堆-动态的排序(洛谷1801-黑匣子)
  11. dax powerbi 生成表函数_如何用Power BI对数据建模?
  12. elm的 java包_Elm架构
  13. time.h中定义的函数
  14. weblogic部署springboot项目
  15. java多线程listview_Android_listview分页加载更多
  16. 9. 面向对象基础(下)
  17. 图书信息管理系统 数据结构 C语言版
  18. Fidder快速上手使用
  19. 中兴通讯年报或亏损29亿 (zz)
  20. C# Websocket连接(wss)

热门文章

  1. vue指令:v-cloak渲染指令(v-cloak 指令是解决屏幕闪动的好方法)
  2. ubuntu21.04中文冒号变乱码问题解决
  3. hbase 2.2.6表及数据的增删改查命令行示例
  4. Linux使用ffmpeg合并视频
  5. 解决git bash右键菜单消失的问题
  6. Python Django jsonpickle序列化隐藏部分字段代码示例
  7. python3多个变量赋值
  8. Linux shell逻辑运算
  9. 卡尔曼滤波、粒子滤波【通俗解释】
  10. 张新、黎民、王亮三位老师分别来自湖南、广西、甘肃,分别教语文、数学和英语。已知:(1)张新不是湖南人,黎明不是广西人;(2)湖南的老师不教英语;(3)广西的老师教语文;(4)黎民不教数学。由此可知,王