Skip to content

Commit 7e0aa01

Browse files
committed
登陆注销、rbac可视控制、加载进度条、动态提示、history mode
1 parent 85566e4 commit 7e0aa01

17 files changed

+418
-71
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"axios": "^0.16.1",
1515
"body-parser": "^1.17.2",
1616
"cookie-parser": "^1.4.3",
17+
"express-session": "^1.15.3",
1718
"iview": "^2.0.0-rc.15",
1819
"moment": "^2.18.1",
1920
"monk": "^5.0.2",

server/dev-server.js

+12
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ var opn = require('opn')
1010
var path = require('path')
1111
var express = require('express')
1212
var cookieParser = require('cookie-parser')
13+
var session = require('express-session');
1314
var bodyParser = require('body-parser')
1415
var routes = require('./routes/index');
1516

@@ -27,9 +28,20 @@ var proxyTable = config.dev.proxyTable
2728

2829
var app = express()
2930

31+
//app.use(express.static(path.join(__dirname, 'static')));
3032
app.use(bodyParser.json());
3133
app.use(bodyParser.urlencoded({ extended: false }));
34+
// cookie
3235
app.use(cookieParser());
36+
app.use(session({
37+
secret: 'backend',
38+
name:'backend',
39+
cookie: {
40+
maxAge: 1000 * 60 * 60
41+
},// 1h
42+
resave: false,
43+
saveUninitialized: true,
44+
}));
3345
routes(app);
3446

3547
var compiler = webpack(webpackConfig)

server/lib/rbac.js

+34-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,39 @@
11
const rbac = (req, res, next) => {
22
// RBAC权限检验
3-
console.log('Time:', Date.now());
4-
next()
3+
console.log('Time:', Date.now());
4+
console.log('originalUrl:'+req.originalUrl)
5+
console.log('baseUrl:'+req.baseUrl)
6+
console.log('path:'+req.path)
7+
8+
const pathArr = ['/agent/new','/agent/list','/mongo/list','/mongo/insert','/mongo/update','/mongo/remove'];
9+
10+
if( pathArr.indexOf(req.path)>=0 ){
11+
// 需授权的合法路由
12+
if( req.session.user && req.session.permission ){
13+
//console.log(req)
14+
let permission = req.session.permission.path;
15+
if( permission.indexOf(req.path)>=0 ){
16+
// 有权限
17+
next()
18+
}else{
19+
// 无权限
20+
res.json({
21+
status: 0,
22+
msg: 'permission denied!'
23+
})
24+
}
25+
}else{
26+
// permission denied
27+
res.json({
28+
status: 0,
29+
msg: '未登陆'
30+
})
31+
}
32+
}else{
33+
// 静态资源、无需授权路径
34+
next()
35+
}
36+
537
}
638

739
module.exports = rbac

server/routes/index.js

+100-13
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33

44
//const RBAC = require('../lib/rbac.js');
55
const RBAC = require('../lib/rbac');
6+
const Islogin = require('../service/islogin.js')
67

78
const crypto = require('crypto')
9+
const async = require('async');
810

911
const db = require('monk')('localhost:27017/backend')
1012
const posts = db.get('posts');
@@ -15,31 +17,116 @@ function md5 (text) {
1517

1618
module.exports = function(app){
1719

18-
app.use(RBAC);
20+
//app.use(Islogin);
21+
22+
app.use(RBAC)
23+
24+
app.get('/islogin', Islogin)
25+
26+
app.get('/logout', function(req, res, next){
27+
req.session.user = null
28+
req.session.permission = null
29+
res.json({
30+
status: 1,
31+
msg: 'logout success'
32+
})
33+
})
1934
// 登陆
2035
app.post('/login', function(req, res, next){
2136
let account = req.body.account,
2237
pwd = req.body.pwd;
2338

2439
const user = db.get('user');
2540
user.findOne({account: account}).then((userinfo)=>{
26-
console.log(userinfo)
27-
if( md5(pwd) == userinfo.pwd ){
28-
let data = {
29-
status: 1,
30-
msg: 'success',
31-
data: userinfo
41+
if( userinfo ){
42+
console.log(userinfo)
43+
if( md5(pwd) == userinfo.pwd ){
44+
45+
let role = db.get('role'),
46+
perObj = {
47+
path: [],
48+
dom: []
49+
}; // 权限合集
50+
// 获取角色的所有权限
51+
async.eachSeries( userinfo.roles, function(item,cb){
52+
role.findOne({name: item}).then((result) => { console.log('findOne role:');console.log(result)
53+
if( result ){
54+
//cb(null,result)
55+
let permission = db.get('permission')
56+
// 获取权限的所有dom
57+
async.eachSeries( result.permissions, function(item,callback){
58+
permission.findOne({ename: item}).then((presult) => { console.log('findOne per:');console.log(presult)
59+
if( presult ){
60+
perObj.dom = perObj.dom.concat( presult.dom )
61+
perObj.path = perObj.path.concat( presult.path )
62+
}
63+
callback()
64+
})
65+
.catch((err) => {
66+
if( err ){
67+
callback(err)
68+
}
69+
})
70+
},function(err, result){
71+
if( err ){
72+
cb(err)
73+
}else{
74+
cb();
75+
}
76+
})
77+
}else{
78+
cb()
79+
}
80+
})
81+
.catch((err) => {
82+
if( err ){
83+
cb(err)
84+
}
85+
})
86+
},function(err, results){
87+
if( err ){
88+
let data = {
89+
status: 0,
90+
msg: '未知错误'
91+
}
92+
res.json(data);
93+
}else{
94+
let data = {
95+
status: 1,
96+
msg: 'success',
97+
data: userinfo,
98+
permission: perObj
99+
}
100+
req.session.user = userinfo;
101+
req.session.permission = perObj;
102+
res.json(data);
103+
}
104+
db.close();
105+
});
106+
}else{
107+
let data = {
108+
status: 0,
109+
msg: 'wrong password'
110+
}
111+
res.json(data);
32112
}
33-
res.json(data);
34113
}else{
114+
// 没有此用户
35115
let data = {
36116
status: 0,
37117
msg: 'wrong password'
38118
}
39119
res.json(data);
40120
}
41-
}).then(() => db.close())
121+
})
122+
.catch((err) => {
123+
if(err){
124+
res.json({status: 0, msg: '发生未知错误'})
125+
}
126+
})
127+
//.then(() => db.close())
42128
})
129+
43130
// 新增代理
44131
app.post('/agent/new', function(req, res, next){
45132
let account = req.body.account,
@@ -108,14 +195,14 @@ module.exports = function(app){
108195
})
109196
})
110197

111-
app.get('/list', function(req, res, next){
198+
app.get('/mongo/list', function(req, res, next){
112199
posts.find({}).then((result) => {
113200
//console.log(result);
114201
res.json(result);
115202
}).then(() => db.close())
116203
})
117204

118-
app.get('/insert', function(req, res, next){
205+
app.get('/mongo/insert', function(req, res, next){
119206
posts.insert({
120207
name: 'bob',
121208
time: {
@@ -132,13 +219,13 @@ module.exports = function(app){
132219
}).then(() => db.close())
133220
})
134221

135-
app.get('/update', function(req, res, next){
222+
app.get('/mongo/update', function(req, res, next){
136223
posts.update({name: 'bob'}, {name: 'stack'}).then((result)=>{
137224
res.json(result)
138225
}).then(() => db.close())
139226
})
140227

141-
app.get('/remove', function(req, res, next){
228+
app.get('/mongo/remove', function(req, res, next){
142229
posts.remove({name: 'stack'}).then((result)=>{
143230
res.json(result)
144231
}).then(() => db.close())

server/service/islogin.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const islogin = (req, res, next) => {
2+
// 检测是否登录
3+
if( req.session.user && req.session.permission ){
4+
res.json({
5+
status: 1,
6+
msg: '已登录',
7+
userinfo: req.session.user,
8+
permission: req.session.permission
9+
})
10+
next()
11+
}else{
12+
res.json({
13+
status: 0,
14+
msg: '未登录233'
15+
})
16+
}
17+
}
18+
19+
module.exports = islogin

src/App.vue

+28-2
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,31 @@ export default {
4949
methods:{
5050
logout(name){
5151
if( name === 'logout' ){
52-
this.$store.commit('showLogin', true)
53-
this.$store.commit('updateUserInfo', null)
52+
this.axios.get('/logout')
53+
.then(response => response.data)
54+
.then(res => {
55+
if( res.status ){
56+
this.$store.commit('showLogin', true)
57+
this.$store.commit('updateUserInfo', null)
58+
}else{
59+
alert('注销失败')
60+
}
61+
})
5462
}
63+
},
64+
checkLogin(){
65+
this.axios.get('/islogin')
66+
.then(response => response.data)
67+
.then(res => {
68+
if( res.status ){
69+
// 已登录
70+
this.$store.commit('showLogin', false)
71+
this.$store.commit('updateUserInfo', res.userinfo)
72+
this.$store.commit('updatePermission', res.permission)
73+
}else{
74+
// 未登录
75+
}
76+
})
5577
}
5678
},
5779
computed:{
@@ -65,6 +87,10 @@ export default {
6587
components:{
6688
VAside,
6789
VLogin
90+
},
91+
mounted(){
92+
console.log('app.vue mounted')
93+
this.checkLogin();
6894
}
6995
}
7096
</script>

0 commit comments

Comments
 (0)