permissions.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { Permission } from '../database/models.js';
  2. export const adminOnly = async (req, res, next) => {
  3. if (req.session.role == 'admin') { next(); }
  4. else { res.redirect('/dashboard'); }
  5. }
  6. export const sessionCheck = async (req, res, next) => {
  7. if (req.session.username) { next(); }
  8. else { res.redirect('/login'); }
  9. }
  10. export const permissionCheck = async (req, res, next) => {
  11. if (req.session.role == 'admin') { next(); return; }
  12. let username = req.session.username;
  13. let action = req.path.split("/")[2];
  14. let container_id = req.header('hx-trigger-name');
  15. const userAction = ['start', 'stop', 'restart', 'pause', 'uninstall', 'upgrade', 'edit', 'logs', 'view'];
  16. const userPaths = ['card', 'updates', 'hide', 'reset', 'alert'];
  17. if (userAction.includes(action)) {
  18. let permission = await Permission.findOne({ where: { containerID: container_id, userID: req.session.userID }, attributes: [`${action}`] });
  19. if (permission) {
  20. if (permission[action] == true) {
  21. console.log(`User ${username} has permission to ${action} ${trigger}`);
  22. next();
  23. return;
  24. }
  25. else {
  26. console.log(`User ${username} does not have permission to ${action} ${trigger}`);
  27. }
  28. }
  29. } else if (userPaths.includes(action)) {
  30. next();
  31. return;
  32. }
  33. }