SYNC: fixed permission check, new permission test

This commit is contained in:
SPRINX0\prochazka
2025-08-22 10:33:01 +02:00
committed by Diflow
parent 02a69ea6d9
commit ee40f32b0c
3 changed files with 46 additions and 8 deletions

View File

@@ -119,4 +119,27 @@ describe('Team edition tests', () => {
cy.contains('Exporting query').click(); cy.contains('Exporting query').click();
cy.themeshot('auditlog'); cy.themeshot('auditlog');
}); });
it('Edit database permissions', () => {
cy.testid('LoginPage_linkAdmin').click();
cy.testid('LoginPage_password').type('adminpwd');
cy.testid('LoginPage_submitLogin').click();
cy.testid('AdminMenuWidget_itemRoles').click();
cy.testid('AdminRolesTab_table').contains('superadmin').click();
cy.testid('AdminRolesTab_databases').click();
cy.testid('AdminDatabasesPermissionsGrid_addButton').click();
cy.testid('AdminDatabasesPermissionsGrid_addButton').click();
cy.testid('AdminDatabasesPermissionsGrid_addButton').click();
cy.testid('AdminListOrRegexEditor_1_regexInput').type('^Chinook[\\d]*$');
cy.testid('AdminListOrRegexEditor_2_listSwitch').click();
cy.testid('AdminListOrRegexEditor_2_listInput').type('Nortwind\nSales');
cy.testid('AdminDatabasesPermissionsGrid_roleSelect_0').select('-2');
cy.testid('AdminDatabasesPermissionsGrid_roleSelect_1').select('-3');
cy.testid('AdminDatabasesPermissionsGrid_roleSelect_2').select('-4');
cy.themeshot('dbpermissions');
});
}); });

View File

@@ -48,11 +48,14 @@ async function testConnectionPermission(connection, req, loadedPermissions) {
return; return;
} }
const conid = _.isString(connection) ? connection : connection?._id; const conid = _.isString(connection) ? connection : connection?._id;
if (hasPermission('internal-storage', loadedPermissions) && conid == '__storage') {
return;
}
const authProvider = getAuthProviderFromReq(req); const authProvider = getAuthProviderFromReq(req);
if (!req) { if (!req) {
return; return;
} }
if (!await authProvider.checkCurrentConnectionPermission(req, conid)) { if (!(await authProvider.checkCurrentConnectionPermission(req, conid))) {
throw new Error('Connection permission not granted'); throw new Error('Connection permission not granted');
} }
} else { } else {
@@ -215,11 +218,23 @@ const TABLE_SCOPE_ID_NAMES = {
'-9': 'collections', '-9': 'collections',
}; };
function getTablePermissionRole(conid, database, objectTypeField, schemaName, pureName, loadedTablePermissions, databasePermissionRole) { function getTablePermissionRole(
let res = databasePermissionRole == 'read_content' ? 'read' : conid,
databasePermissionRole == 'write_data' ? 'create_update_delete' : database,
databasePermissionRole == 'run_script' ? 'run_script' : objectTypeField,
'deny'; schemaName,
pureName,
loadedTablePermissions,
databasePermissionRole
) {
let res =
databasePermissionRole == 'read_content'
? 'read'
: databasePermissionRole == 'write_data'
? 'create_update_delete'
: databasePermissionRole == 'run_script'
? 'run_script'
: 'deny';
for (const permissionRow of loadedTablePermissions) { for (const permissionRow of loadedTablePermissions) {
if (!matchDatabasePermissionRow(conid, database, permissionRow)) { if (!matchDatabasePermissionRow(conid, database, permissionRow)) {
continue; continue;
@@ -286,7 +301,6 @@ async function testDatabaseRolePermission(conid, database, requiredRole, req) {
} }
} }
module.exports = { module.exports = {
hasPermission, hasPermission,
connectionHasPermission, connectionHasPermission,
@@ -298,5 +312,5 @@ module.exports = {
getTablePermissionRole, getTablePermissionRole,
testStandardPermission, testStandardPermission,
testDatabaseRolePermission, testDatabaseRolePermission,
getTablePermissionRoleLevelIndex getTablePermissionRoleLevelIndex,
}; };

View File

@@ -199,6 +199,7 @@
tabindex={selectable ? -1 : undefined} tabindex={selectable ? -1 : undefined}
on:keydown={handleKeyDown} on:keydown={handleKeyDown}
class:stickyHeader class:stickyHeader
data-testid={$$props['data-testid']}
> >
<thead class:stickyHeader> <thead class:stickyHeader>
<tr> <tr>