From 1c6a946b14044e973bb2cda0a42255c4980c5b5b Mon Sep 17 00:00:00 2001 From: Praveen D Date: Wed, 8 Aug 2018 16:00:43 +0530 Subject: [PATCH 1/8] console: remove permission for a role in a table --- .../Services/Data/TableModify/Modify.scss | 18 ++++- .../Services/Data/TablePermissions/Actions.js | 72 +++++++++++++++++++ .../Data/TablePermissions/Permissions.js | 35 +++++++-- 3 files changed, 118 insertions(+), 7 deletions(-) diff --git a/console/src/components/Services/Data/TableModify/Modify.scss b/console/src/components/Services/Data/TableModify/Modify.scss index 9d99e07706fc2..3764a14f9edee 100644 --- a/console/src/components/Services/Data/TableModify/Modify.scss +++ b/console/src/components/Services/Data/TableModify/Modify.scss @@ -41,7 +41,7 @@ .newRoleInput { margin-left: 20px; - width: 80%; + width: calc(100% - 40px); height: 30px; } @@ -173,7 +173,18 @@ hr td:first-child, th:first-child { border-right: 4px double #ddd; font-weight: bold; - width: 20%; + width: 10%; + } + td:nth-child(2) { + overflow: auto; + max-width: 250px; + width: 250px; + } + .newRoleTd { + padding-top: 13px; + } + .permissionDelete { + cursor: pointer; } .editPermissionLink { @@ -209,17 +220,18 @@ hr } } - .activeEdit { .editPermissionsHeading { font-weight: bold; font-size: 16px; margin-bottom: 5px; + word-wrap: break-word; } .editPermissionsSection { margin: 5px; padding: 10px; + word-wrap: break-word; .columnListElement { float: left; diff --git a/console/src/components/Services/Data/TablePermissions/Actions.js b/console/src/components/Services/Data/TablePermissions/Actions.js index 06905fb09a924..9e6492c5ca779 100644 --- a/console/src/components/Services/Data/TablePermissions/Actions.js +++ b/console/src/components/Services/Data/TablePermissions/Actions.js @@ -132,6 +132,77 @@ const toggleColumn = (permissions, column) => { return _newColumns; }; +const permRemoveRole = (tableSchema, roleName) => { + return (dispatch, getState) => { + const currentSchema = getState().tables.currentSchema; + const permissionsState = getState().tables.modify.permissionsState; + + const table = tableSchema.table_name; + const role = roleName; + + const currRolePermissions = tableSchema.permissions.find( + p => p.role_name === role + ); + + const permissionsUpQueries = []; + const permissionsDownQueries = []; + console.log(permissionsState); + console.log(currRolePermissions); + + if (currRolePermissions && currRolePermissions.permissions) { + Object.keys(currRolePermissions.permissions).forEach(type => { + const deleteQuery = { + type: 'drop_' + type + '_permission', + args: { + table: { name: table, schema: currentSchema }, + role: role, + }, + }; + const createQuery = { + type: 'create_' + type + '_permission', + args: { + table: { name: table, schema: currentSchema }, + role: role, + permission: currRolePermissions.permissions[type], + }, + }; + permissionsUpQueries.push(deleteQuery); + permissionsDownQueries.push(createQuery); + }); + } + + // Apply migration + const migrationName = + 'remove_permission_' + role + '_' + currentSchema + '_table_' + table; + + const requestMsg = 'Removing permissions...'; + const successMsg = 'Permission removed'; + const errorMsg = 'Removing permissions failed'; + + const customOnSuccess = () => { + dispatch(_permRemoveAccess()); + // reset new role name + dispatch(permSetRoleName('')); + // close edit box + dispatch(permCloseEdit()); + }; + const customOnError = () => {}; + + makeMigrationCall( + dispatch, + getState, + permissionsUpQueries, + permissionsDownQueries, + migrationName, + customOnSuccess, + customOnError, + requestMsg, + successMsg, + errorMsg + ); + }; +}; + const permChangePermissions = changeType => { return (dispatch, getState) => { const allSchemas = getState().tables.allSchemas; @@ -252,6 +323,7 @@ export { permToggleEnableLimit, permToggleModifyLimit, permCustomChecked, + permRemoveRole, toggleColumn, toggleAllColumns, queriesWithPermColumns, diff --git a/console/src/components/Services/Data/TablePermissions/Permissions.js b/console/src/components/Services/Data/TablePermissions/Permissions.js index 6f0d0c0670caf..a2b803951704a 100644 --- a/console/src/components/Services/Data/TablePermissions/Permissions.js +++ b/console/src/components/Services/Data/TablePermissions/Permissions.js @@ -23,6 +23,7 @@ import { permToggleEnableLimit, permToggleModifyLimit, permCustomChecked, + permRemoveRole, } from './Actions'; import PermissionBuilder from './PermissionBuilder/PermissionBuilder'; import TableHeader from '../TableCommon/TableHeader'; @@ -181,12 +182,35 @@ class Permissions extends Component { const dispatchRoleNameChange = e => { dispatch(permSetRoleName(e.target.value)); }; + const dispatchDeletePermission = () => { + const isConfirm = window.confirm( + 'Are you sure you want to delete the permission for role ' + + role + + '?' + ); + if (isConfirm) { + dispatch(permRemoveRole(tableSchema, role)); + } + }; const _permissionsRowHtml = []; + if (role === 'admin' || role === '') { + _permissionsRowHtml.push(); + } else { + _permissionsRowHtml.push( + +