Toc
  1. 使用中间件进行权限的控制
Toc
0 results found
bbcfive
graphQL-middleware
2020/06/03 前端 graphQL

使用中间件进行权限的控制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const express = require('express');
const {buildSchema} = require('graphql');
const graphqlHTTP = require('express-graphql');

// 定义schema,查询和类型
const schema = buildSchema(`
input AccountInput {
name: String
age: Int
sex: String
department: String
}
type Account {
name: String
age: Int
sex: String
department: String
}
type Mutation {
createAccount(input: AccountInput): Account
updateAccount(id: ID!, input: AccountInput): Account
}
type Query {
accounts: [Account]
}
`);

const fakeDb = {};

// 定义查询对应的处理器
const root = {
accounts() {
// 对象转数组以便输出
var arr = [];
for(const key in fakeDb) {
arr.push(fakeDb[key])
}
return arr;
},
createAccount({input}) {
// 相当于数据库的保存
fakeDb[input.name] = input;
return fakeDb[input.name];
},
updateAccount({id, input}) {
// 相当于数据库的更新
const updatedAccount = Object.assign({}, fakeDb[id], input);
fakeDb[id] = this.updatedAccount;
return updatedAccount;
}
}

const app = express();

const middleware = (req, res, next) => {
// 手动更改cookie,实战中需要后端生成token给前端
if(req.url.indexOf('/graphql') !== -1 && req.headers.cookie.indexOf('auth') === -1) {
res.send(JSON.stringify({
error: "您没有权限访问这个接口"
}));
return;
}
next();
}

app.use(middleware);

app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true
}))

app.listen(3000);
本文作者:bbcfive
版权声明:本文首发于bbcfive的博客,转载请注明出处!