Fix jwt-token

This commit is contained in:
2025-09-15 06:39:25 +02:00
parent 2851a2e9c8
commit 159affb113
3 changed files with 32 additions and 1 deletions

View File

@@ -155,6 +155,32 @@ const checkPermission = (userRole, resource, action) => {
return hasPermission(userRole, permission); return hasPermission(userRole, permission);
}; };
/**
* Compatibility function for tests - creates middleware for specific resource.action
* @param {string} resource - The resource (e.g., 'devices', 'users')
* @param {string} action - The action (e.g., 'read', 'create', 'update', 'delete')
* @returns {Function} - Express middleware function
*/
const requirePermission = (resource, action) => {
return (req, res, next) => {
if (!req.user || !req.user.role) {
return res.status(403).json({
success: false,
message: 'Access denied - no user role'
});
}
if (!checkPermission(req.user.role, resource, action)) {
return res.status(403).json({
success: false,
message: 'Access denied - insufficient permissions'
});
}
next();
};
};
/** /**
* Check if a user has any of the specified permissions * Check if a user has any of the specified permissions
* @param {string} userRole - The user's role * @param {string} userRole - The user's role
@@ -261,6 +287,7 @@ module.exports = {
ROLES, ROLES,
hasPermission, hasPermission,
checkPermission, checkPermission,
requirePermission,
hasAnyPermission, hasAnyPermission,
hasAllPermissions, hasAllPermissions,
getPermissions, getPermissions,

View File

@@ -1,7 +1,7 @@
const { describe, it, beforeEach, afterEach, before, after } = require('mocha'); const { describe, it, beforeEach, afterEach, before, after } = require('mocha');
const { expect } = require('chai'); const { expect } = require('chai');
const sinon = require('sinon'); const sinon = require('sinon');
const { hasPermission, checkPermission, requirePermissions } = require('../../middleware/rbac'); const { hasPermission, checkPermission, requirePermission, requirePermissions } = require('../../middleware/rbac');
const { setupTestEnvironment, teardownTestEnvironment, cleanDatabase, mockRequest, mockResponse, mockNext, createTestUser, createTestTenant } = require('../setup'); const { setupTestEnvironment, teardownTestEnvironment, cleanDatabase, mockRequest, mockResponse, mockNext, createTestUser, createTestTenant } = require('../setup');
describe('RBAC Middleware', () => { describe('RBAC Middleware', () => {

View File

@@ -215,7 +215,11 @@ async function createTestDetection(detectionData = {}) {
async function createTestTenant(tenantData = {}) { async function createTestTenant(tenantData = {}) {
const { Tenant } = models; const { Tenant } = models;
// Generate a simple test ID for tenant
const testId = 'tenant-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9);
const defaultTenantData = { const defaultTenantData = {
id: testId, // Use explicit test ID
name: 'Test Tenant', name: 'Test Tenant',
slug: 'test-tenant-' + Date.now(), slug: 'test-tenant-' + Date.now(),
domain: 'test.example.com', domain: 'test.example.com',