permissions.js 1020 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. let { User } = require('../models')
  2. //`req` is the request object
  3. //`permissions` is an array of strings:
  4. //('loggedIn', 'admin', 'canCreatePosts', 'canCreateThreads',)
  5. module.exports = async function (req, permissions) {
  6. try {
  7. //The return value - i.e. does the user have the
  8. //appropriate permissions
  9. let ret = true
  10. if(permissions.includes('loggedIn')) {
  11. ret = !!req.session.loggedIn
  12. }
  13. if(permissions.includes('admin')) {
  14. ret = !!req.session.admin
  15. }
  16. //`ret` to check if they are loggedIn/admin and so their account does exist
  17. if(
  18. ( permissions.includes('canCreatePosts') || permissions.includes('canCreateThreads') )
  19. && ret
  20. ) {
  21. let user = await User.findOne({
  22. where: { username: req.session.username }
  23. })
  24. if(!user) return false
  25. if(permissions.includes('canCreatePosts')) {
  26. ret = user.canCreatePosts
  27. }
  28. if(permissions.includes('canCreateThreads')) {
  29. ret = user.canCreateThreads
  30. }
  31. }
  32. return ret
  33. } catch(e) {
  34. console.log(e)
  35. return false
  36. }
  37. }