Fix jwt-token
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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', () => {
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user