mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-23 18:35:58 +00:00
SYNC: fixed permission check, new permission test
This commit is contained in:
committed by
Diflow
parent
02a69ea6d9
commit
ee40f32b0c
@@ -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');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user