mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-14 01:13:49 -06:00
83 lines
2.4 KiB
JavaScript
83 lines
2.4 KiB
JavaScript
/////////////////////////////////////////////////////////////
|
|
//
|
|
// pgAdmin 4 - PostgreSQL Tools
|
|
//
|
|
// Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
|
// This software is released under the PostgreSQL Licence
|
|
//
|
|
//////////////////////////////////////////////////////////////
|
|
|
|
import gettext from 'sources/gettext';
|
|
import BaseUISchema from 'sources/SchemaView/base_schema.ui';
|
|
import { getNodeListByName } from '../../../../static/js/node_ajax';
|
|
|
|
export function getNodePrivilegeRoleSchema(nodeObj, treeNodeInfo, itemNodeData, privileges) {
|
|
return new PrivilegeRoleSchema(
|
|
()=>getNodeListByName('role', treeNodeInfo, itemNodeData, {}, ()=>true, (res)=>{
|
|
res.unshift({label: 'PUBLIC', value: 'PUBLIC'});
|
|
return res;
|
|
}),
|
|
()=>getNodeListByName('role', treeNodeInfo, itemNodeData),
|
|
treeNodeInfo,
|
|
privileges
|
|
);
|
|
}
|
|
|
|
export default class PrivilegeRoleSchema extends BaseUISchema {
|
|
constructor(granteeOptions, grantorOptions, nodeInfo, supportedPrivs) {
|
|
super({
|
|
grantee: undefined,
|
|
grantor: nodeInfo?.server?.user?.name,
|
|
privileges: undefined,
|
|
});
|
|
this.granteeOptions = granteeOptions;
|
|
this.grantorOptions = grantorOptions;
|
|
this.nodeInfo = nodeInfo;
|
|
this.supportedPrivs = supportedPrivs || [];
|
|
}
|
|
|
|
updateSupportedPrivs = (updatedPrivs) => {
|
|
this.supportedPrivs = updatedPrivs;
|
|
};
|
|
get baseFields() {
|
|
let obj = this;
|
|
|
|
return [{
|
|
id: 'grantee', label: gettext('Grantee'), type:'text',
|
|
editable: true,
|
|
cell: ()=>({
|
|
cell: 'select', options: this.granteeOptions,
|
|
controlProps: {
|
|
allowClear: false,
|
|
}
|
|
}),
|
|
noEmpty: true,
|
|
},
|
|
{
|
|
id: 'privileges', label: gettext('Privileges'),
|
|
type: 'text', group: null,
|
|
cell: ()=>({cell: 'privilege', controlProps: {
|
|
supportedPrivs: this.supportedPrivs,
|
|
}}),
|
|
disabled : function(state) {
|
|
return !(
|
|
obj.nodeInfo &&
|
|
obj.nodeInfo.server?.user?.name == state['grantor']
|
|
);
|
|
},
|
|
},
|
|
{
|
|
id: 'grantor', label: gettext('Grantor'), type: 'text', readonly: true,
|
|
editable: false, cell: ()=>({cell: 'select', options: obj.grantorOptions}),
|
|
}];
|
|
}
|
|
|
|
validate(state, setError) {
|
|
if((state.privileges || []).length <= 0) {
|
|
setError('privileges', gettext('At least one privilege should be selected.'));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|