@@ -32,6 +32,7 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
3232 const [ allowCompleted , setAllowCompleted ] = useState ( false ) ;
3333 const [ usersCompleted , setUsersCompleted ] = useState ( false ) ;
3434 const [ failed , setFailed ] = useState ( false ) ;
35+ const [ isDatabaseEmpty , setIsDatabaseEmpty ] = useState ( false ) ;
3536
3637 useEffect ( ( ) => {
3738 if ( ! open ) {
@@ -75,35 +76,48 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
7576
7677 const handleDatabaseSelect = ( selectedOption ) => {
7778 setSelectedDatabase ( selectedOption . value ) ;
78- retrieveLabelsList ( driver , selectedOption . value , ( records ) => parseLabelsList ( selectedOption . value , records ) ) ;
79+ setLabels ( [ ] ) ;
80+ setAllowList ( [ ] ) ;
81+ setDenyList ( [ ] ) ;
82+ retrieveLabelsList ( driver , selectedOption . value , ( records ) => {
83+ if ( records . length === 0 ) {
84+ setIsDatabaseEmpty ( true ) ;
85+ } else {
86+ parseLabelsList ( selectedOption . value , records ) ;
87+ setIsDatabaseEmpty ( false ) ;
88+ }
89+ } ) ;
7990 } ;
8091
8192 const handleSave = async ( ) => {
8293 createNotification ( 'Updating' , `Access for role '${ currentRole } ' is being updated, please wait...` ) ;
83- console . log ( selectedUsers ) ;
84- updateUsers (
85- driver ,
86- currentRole ,
87- neo4jUsers ,
88- selectedUsers ,
89- ( ) => setUsersCompleted ( true ) ,
90- ( failReason ) => setFailed ( `Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${ failReason } ` )
91- ) ;
92-
93- if ( selectedDatabase ) {
94- const nonFixedDenyList = denyList . filter ( ( n ) => ! fixedDenyList . includes ( n ) ) ;
95- const nonFixedAllowList = allowList . filter ( ( n ) => ! fixedDenyList . includes ( n ) ) ;
96- updatePrivileges (
94+ try {
95+ await updateUsers (
9796 driver ,
98- selectedDatabase ,
9997 currentRole ,
100- labels ,
101- nonFixedDenyList ,
102- Operation . DENY ,
103- ( ) => setDenyCompleted ( true ) ,
104- ( failReason ) => setFailed ( `Operation 'DENY LABEL ACCESS' failed.\n Reason: ${ failReason } ` )
105- ) . then ( ( ) => {
106- updatePrivileges (
98+ neo4jUsers ,
99+ selectedUsers ,
100+ ( ) => setUsersCompleted ( true ) ,
101+ ( failReason ) => setFailed ( `Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${ failReason } ` )
102+ ) ;
103+
104+ if ( selectedDatabase && labels . length > 0 ) {
105+ // Check if there are labels to update
106+ const nonFixedDenyList = denyList . filter ( ( n ) => ! fixedDenyList . includes ( n ) ) ;
107+ const nonFixedAllowList = allowList . filter ( ( n ) => ! fixedDenyList . includes ( n ) ) ;
108+
109+ await updatePrivileges (
110+ driver ,
111+ selectedDatabase ,
112+ currentRole ,
113+ labels ,
114+ nonFixedDenyList ,
115+ Operation . DENY ,
116+ ( ) => setDenyCompleted ( true ) ,
117+ ( failReason ) => setFailed ( `Operation 'DENY LABEL ACCESS' failed.\n Reason: ${ failReason } ` )
118+ ) ;
119+
120+ await updatePrivileges (
107121 driver ,
108122 selectedDatabase ,
109123 currentRole ,
@@ -113,14 +127,18 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
113127 ( ) => setAllowCompleted ( true ) ,
114128 ( failReason ) => setFailed ( `Operation 'ALLOW LABEL ACCESS' failed.\n Reason: ${ failReason } ` )
115129 ) ;
116- } ) ;
117- } else {
118- // Since there is no database selected, we don't run the DENY/ALLOW queries.
119- // We just mark them as completed so the success message shows up.
120- setDenyCompleted ( true ) ;
121- setAllowCompleted ( true ) ;
130+ } else {
131+ // Since there is no database or labels selected, we don't run the DENY/ALLOW queries.
132+ // We just mark them as completed so the success message shows up.
133+ setDenyCompleted ( true ) ;
134+ setAllowCompleted ( true ) ;
135+ }
136+ } catch ( error ) {
137+ // Handle any errors that occur during the update process
138+ createNotification ( 'error' , `An error occurred: ${ error . message } ` ) ;
139+ } finally {
140+ handleClose ( ) ;
122141 }
123- handleClose ( ) ;
124142 } ;
125143
126144 return (
@@ -171,8 +189,13 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
171189 onChange : handleDatabaseSelect ,
172190 } }
173191 />
192+ { selectedDatabase && isDatabaseEmpty && (
193+ < p style = { { color : 'red' } } >
194+ This database is currently empty. Please select a different database or add labels to manage access.
195+ </ p >
196+ ) }
174197 </ div >
175- { selectedDatabase && loaded && (
198+ { selectedDatabase && ! isDatabaseEmpty && loaded && (
176199 < >
177200 < br />
178201 < div style = { { display : 'flex' , justifyContent : 'space-between' } } >
0 commit comments