diff options
| author | Jan Tuomi <jan.tuomi@eficode.com> | 2020-02-05 19:25:36 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan.tuomi@eficode.com> | 2020-02-05 19:25:36 +0200 |
| commit | 71d9490d0988c97b8b023a70e0b61c65f32ad3b9 (patch) | |
| tree | df6f3db2c1f3c3ef9339843431a79197b465a74c /backend/src/authz.js | |
| parent | 48a60c896d86de9bf76806ca60da35ef9f77259e (diff) | |
Implement permissions
Diffstat (limited to 'backend/src/authz.js')
| -rw-r--r-- | backend/src/authz.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/backend/src/authz.js b/backend/src/authz.js new file mode 100644 index 0000000..94dfa85 --- /dev/null +++ b/backend/src/authz.js @@ -0,0 +1,42 @@ +const db = require('./db'); + +const userHasPermission = async (user, permission_name) => { + const permission = await db('permissions').where({ name: permission_name }).first(); + const userPermission = await db('users_permissions') + .where({ user_id: user.id, permission_id: permission.id }) + .first(); + + return !!userPermission; +}; + +const userHasPermissions = async (user, permission_names) => { + for (permission_name of permission_names) { + const hasPermission = await userHasPermission(user, permission_name); + if (!hasPermission) { + return false; + } + } + return true; +}; + +const permissionMiddleware = permission_name => async (req, res, next) => { + const user = req.user; + const hasPermission = Array.isArray(permission_name) + ? await userHasPermissions(user, permission_name) + : await userHasPermission(user, permission_name); + + if (hasPermission) { + await next(); + } else { + res.status(401); + res.json({ + error: 'Required permission missing.', + permission_name, + }); + } +}; + +module.exports = { + userHasPermission, + permissionMiddleware, +}; |
