From 6c4733ff82543b6dd393f5d8a194df7dc7e501c6 Mon Sep 17 00:00:00 2001 From: zuiidea Date: Fri, 31 Mar 2017 20:28:34 +0800 Subject: [PATCH] user permissions --- mock/app.js | 21 ++++++++++++++++++--- src/models/app.js | 38 ++++++++++++++++++++++++++++++++------ src/router.js | 23 ++++++++++------------- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/mock/app.js b/mock/app.js index c4e675d..4f413f7 100644 --- a/mock/app.js +++ b/mock/app.js @@ -1,14 +1,27 @@ const Cookie = require('js-cookie') import mockStorge from '../src/utils/mockStorge' +const userPermission = { + DEFAULT: ['dashboard', 'chart'], + ADMIN: ['dashboard', 'users', 'UIElement', 'UIElementIconfont', 'chart'], + DEVELOPER: ['dashboard', 'users', 'UIElement', 'UIElementIconfont', 'chart'], +} + let dataKey = mockStorge('AdminUsers', [ + { + username: 'admin', + password: 'admin', + permissions: userPermission.ADMIN, + }, { username: 'guest', password: 'guest', + permissions: userPermission.DEFAULT, }, { username: '吴彦祖', password: '123456', + permissions: userPermission.DEVELOPER, }, ]) @@ -19,17 +32,18 @@ module.exports = { success: false, message: '', } - const d = global[dataKey].filter((item) => { + const currentUser = global[dataKey].filter((item) => { return item.username === userItem.username }) - if (d.length) { - if (d[0].password === userItem.password) { + if (currentUser.length) { + if (currentUser[0].password === userItem.password) { const now = new Date() now.setDate(now.getDate() + 1) Cookie.set('user_session', now.getTime(), { path: '/' }) Cookie.set('user_name', userItem.username, { path: '/' }) response.message = '登录成功' response.success = true + response.userPermissions = global[dataKey].filter(_ => _.username === userItem.username)[0].permissions } else { response.message = '密码不正确' } @@ -44,6 +58,7 @@ module.exports = { success: Cookie.get('user_session') && Cookie.get('user_session') > new Date().getTime(), username: Cookie.get('user_name') || '', message: '', + userPermissions: global[dataKey].filter(_ => _.username === Cookie.get('user_name'))[0].permissions, } res.json(response) }, diff --git a/src/models/app.js b/src/models/app.js index ecf2d3b..65e2c6f 100644 --- a/src/models/app.js +++ b/src/models/app.js @@ -14,6 +14,30 @@ export default { darkTheme: localStorage.getItem('antdAdminDarkTheme') !== 'false', isNavbar: document.body.clientWidth < 769, navOpenKeys: [], + permissions: { + dashboard: { + text: 'Dashboard', + route: 'dashboard', + }, + users: { + text: 'User Manage', + route: 'users', + }, + UIElement: { + text: 'UI Element', + route: 'UIElement', + }, + UIElementIconfont: { + text: 'Iconfont', + route: 'UIElement/iconfont', + parent: 'UIElement', + }, + chart: { + text: 'Rechart', + route: 'chart', + }, + }, + userPermissions: [], }, subscriptions: { setup ({ dispatch }) { @@ -28,13 +52,14 @@ export default { payload, }, { call, put }) { yield put({ type: 'showLoginButtonLoading' }) - const data = yield call(login, parse(payload)) - if (data.success) { + const { success, userPermissions, username } = yield call(login, parse(payload)) + if (success) { yield put({ type: 'loginSuccess', payload: { + userPermissions, user: { - name: payload.username, + name: username, }, } }) } else { @@ -46,13 +71,14 @@ export default { *queryUser ({ payload, }, { call, put }) { - const data = yield call(userInfo, parse(payload)) - if (data.success) { + const { success, userPermissions, username } = yield call(userInfo, parse(payload)) + if (success) { yield put({ type: 'loginSuccess', payload: { + userPermissions, user: { - name: data.username, + name: username, }, }, }) diff --git a/src/router.js b/src/router.js index 2a987ee..c3f44be 100644 --- a/src/router.js +++ b/src/router.js @@ -1,5 +1,6 @@ import React, { PropTypes } from 'react' import { Router } from 'dva/router' +// import pathToRegexp from 'path-to-regexp' import App from './routes/app' const cached = {} @@ -11,6 +12,10 @@ const registerModel = (app, model) => { } const Routers = function ({ history, app }) { + const handleChildRoute = ({ location, params, routes }) => { + console.log(location, params, routes) + } + const routes = [ { path: '/', @@ -24,7 +29,6 @@ const Routers = function ({ history, app }) { childRoutes: [ { path: 'dashboard', - name: 'dashboard', getComponent (nextState, cb) { require.ensure([], require => { registerModel(app, require('./models/dashboard')) @@ -33,7 +37,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'users', - name: 'users', getComponent (nextState, cb) { require.ensure([], require => { registerModel(app, require('./models/users')) @@ -42,7 +45,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'request', - name: 'request', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/request/')) @@ -50,7 +52,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'UIElement/iconfont', - name: 'UIElement/iconfont', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/UIElement/iconfont/')) @@ -58,7 +59,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'UIElement/search', - name: 'UIElement/search', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/UIElement/search/')) @@ -66,7 +66,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'UIElement/dropOption', - name: 'UIElement/dropOption', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/UIElement/dropOption/')) @@ -74,7 +73,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'UIElement/layer', - name: 'UIElement/layer', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/UIElement/layer/')) @@ -82,7 +80,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'UIElement/dataTable', - name: 'UIElement/dataTable', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/UIElement/dataTable/')) @@ -90,7 +87,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'UIElement/editor', - name: 'UIElement/editor', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/UIElement/editor/')) @@ -98,7 +94,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'chart/lineChart', - name: 'chart/lineChart', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/chart/lineChart/')) @@ -106,7 +101,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'chart/barChart', - name: 'chart/barChart', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/chart/barChart/')) @@ -114,7 +108,6 @@ const Routers = function ({ history, app }) { }, }, { path: 'chart/areaChart', - name: 'chart/areaChart', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/chart/areaChart/')) @@ -122,7 +115,6 @@ const Routers = function ({ history, app }) { }, }, { path: '*', - name: 'error', getComponent (nextState, cb) { require.ensure([], require => { cb(null, require('./routes/error/')) @@ -133,6 +125,11 @@ const Routers = function ({ history, app }) { }, ] + routes[0].childRoutes.map(item => { + item.onEnter = handleChildRoute + return item + }) + return }