在中后台管理项目中,权限是重要的基础功能。在项目架构初期,就要作好全面的设计。 传统的基于url控制的后端权限,在前端spa应用的前提下,已经再也不合适。服务端并不能获取到前端的路由跳转。权限这快,前端的逻辑将会更重。基于Ant Design Pro2 ,umi2 的技术栈前提下,antd已经提供的一套相对完善的权限方案。前端
权限的维度咱们但愿控制到按钮层,包括菜单,包括路由。后端
antd的方案基于角色维度来进行。config设定当前路由的准入角色。权限组建接受当前角色信息,如此判断渲染的内容。bash
如需对某些页面进行权限控制,只须在路由配置文件 router.config.js 中设置 authority 属性便可,表明该路由的准入权限,pro 的路由系统中会默认包裹 Authorized 进行判断处理。antd
缺陷:umi2中基于约定路由的形式。在路由初始化时不能动态配置config。及不能动态修改authority字段。并且基于角色的权限不能知足咱们的需求。咱们但愿精确到用户的权限配置。后端下发菜单,路由以及按钮list。架构
为解决该问题。咱们在router.config.js新增code字段。标记路由的惟一code。Routes定义路由层的父级组件。在该组件中进行路由拦截,实现路由级别权限控制。 // config.jsurl
[
{ path: '/', component: './pages/index.js' },
{ path: '/list', component: './pages/list.js',code:123, Routes: ['./routes/PrivateRoute.js'] },
]
复制代码
// PrivateRoute.jsspa
if (route.code && menuList && menuList.indexOf(route.code) == -1) {
router.replace('/exception/403');
}
复制代码
基于pro的菜单方案进行了修改。直接动刀BasicLayout.js,修改原先基于authority字段的菜单逻辑。改至code字段。设计
路由表由前端提供,路由名称,(包括路由,菜单,以及按钮类型)。后端存至服务端。再有对应的token下发对应的code list。code
写个高阶组件封装下button。 overcomponent