Clean way to seed the database

1. Temporarily open another backend with permissions disabled
2. Connect to this backend and run seed data
This commit is contained in:
Robert Schäfer 2018-11-20 20:53:48 +01:00
parent 96da90a255
commit 803e613c4b
5 changed files with 681 additions and 44 deletions

View File

@ -7,7 +7,7 @@
"test": "echo \"Error: no test specified\" && exit 1",
"start": "./node_modules/.bin/nodemon --exec babel-node src/index.js",
"start:debug": "./node_modules/.bin/nodemon --exec babel-node --inspect=0.0.0.0:9229 src/index.js",
"seedDb": "cross-env IS_SEEDING='true' ./node_modules/.bin/babel-node src/seed/seed-db.js && cross-env IS_SEEDING=false"
"db:seed": "concurrently --kill-others --success first 'cross-env GRAPHQL_URI=http://localhost:4001 PERMISSIONS=disabled GRAPHQL_LISTEN_PORT=4001 yarn run start' 'wait-on tcp:4001 && cross-env GRAPHQL_URI=http://localhost:4001 ./node_modules/.bin/babel-node src/seed/seed-db.js'"
},
"author": "Grzegorz Leoniec",
"license": "MIT",
@ -19,7 +19,6 @@
"apollo-server": "^2.0.4",
"bcryptjs": "^2.4.3",
"cheerio": "^1.0.0-rc.2",
"cross-env": "^5.2.0",
"date-fns": "^2.0.0-alpha.24",
"dotenv": "^6.0.0",
"graphql-custom-directives": "^0.2.13",
@ -44,7 +43,10 @@
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-preset-env": "^1.7.0",
"concurrently": "^4.1.0",
"cross-env": "^5.2.0",
"faker": "^4.1.0",
"nodemon": "^1.18.4"
"nodemon": "^1.18.4",
"wait-on": "^3.2.0"
}
}

View File

@ -67,7 +67,7 @@ server.express.use(passport.initialize())
server.express.post('/graphql', passport.authenticate(['jwt'], { session: false }))
const serverConfig = {
port: 4000
port: process.env.GRAPHQL_LISTEN_PORT
// cors: {
// credentials: true,
// origin: [process.env.CLIENT_URI] // your frontend url.

View File

@ -7,13 +7,18 @@ import dateTimeMiddleware from './dateTimeMiddleware';
import xssMiddleware from './xssMiddleware';
import permissionsMiddleware from './permissionsMiddleware';
export default schema => [
permissionsMiddleware.generate(schema),
passwordMiddleware,
dateTimeMiddleware,
sluggifyMiddleware,
excerptMiddleware,
xssMiddleware,
fixImageUrlsMiddleware,
softDeleteMiddleware
]
export default schema => {
let middleware = [
passwordMiddleware,
dateTimeMiddleware,
sluggifyMiddleware,
excerptMiddleware,
xssMiddleware,
fixImageUrlsMiddleware,
softDeleteMiddleware
]
if (process.env.PERMISSIONS !== 'disabled') {
middleware.push(permissionsMiddleware.generate(schema))
}
return middleware
}

View File

@ -1,36 +1,15 @@
import { rule, shield, and, or, not, allow } from 'graphql-shield'
const isAuthenticated = rule()(async (parent, args, ctx, info) => {
// TODO: how to get this working while seeding?
console.log('isSeeding', process.env.IS_SEEDING)
if (process.env.IS_SEEDING === true) {
return true
}
return ctx.user !== null
})
const isOwner = rule()(async (parent, args, ctx, info) => {
// TODO: how to get this working while seeding?
console.log('isSeeding', process.env.IS_SEEDING)
if (process.env.IS_SEEDING === true) {
return true
}
console.log('parent', parent)
return ctx.user.id === parent.id
})
const isAdmin = rule()(async (parent, args, ctx, info) => {
// TODO: how to get this working while seeding?
console.log('isSeeding', process.env.IS_SEEDING)
if (process.env.IS_SEEDING === true) {
return true
}
return ctx.user.role === 'ADMIN'
})
const isModerator = rule()(async (parent, args, ctx, info) => {
// TODO: how to get this working while seeding?
console.log('isSeeding', process.env.IS_SEEDING)
if (process.env.IS_SEEDING === true) {
return true
}
return ctx.user.role === 'MODERATOR'
})

669
yarn.lock

File diff suppressed because it is too large Load Diff