@@ -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,34 +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- updateUsers (
84- driver ,
85- currentRole ,
86- neo4jUsers ,
87- selectedUsers ,
88- ( ) => setUsersCompleted ( true ) ,
89- ( failReason ) => setFailed ( `Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${ failReason } ` )
90- ) ;
91-
92- if ( selectedDatabase ) {
93- const nonFixedDenyList = denyList . filter ( ( n ) => ! fixedDenyList . includes ( n ) ) ;
94- const nonFixedAllowList = allowList . filter ( ( n ) => ! fixedDenyList . includes ( n ) ) ;
95- updatePrivileges (
94+ try {
95+ await updateUsers (
9696 driver ,
97- selectedDatabase ,
9897 currentRole ,
99- labels ,
100- nonFixedDenyList ,
101- Operation . DENY ,
102- ( ) => setDenyCompleted ( true ) ,
103- ( failReason ) => setFailed ( `Operation 'DENY LABEL ACCESS' failed.\n Reason: ${ failReason } ` )
104- ) . then ( ( ) => {
105- 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 (
106121 driver ,
107122 selectedDatabase ,
108123 currentRole ,
@@ -112,14 +127,18 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
112127 ( ) => setAllowCompleted ( true ) ,
113128 ( failReason ) => setFailed ( `Operation 'ALLOW LABEL ACCESS' failed.\n Reason: ${ failReason } ` )
114129 ) ;
115- } ) ;
116- } else {
117- // Since there is no database selected, we don't run the DENY/ALLOW queries.
118- // We just mark them as completed so the success message shows up.
119- setDenyCompleted ( true ) ;
120- 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 ( ) ;
121141 }
122- handleClose ( ) ;
123142 } ;
124143
125144 return (
@@ -170,8 +189,13 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
170189 onChange : handleDatabaseSelect ,
171190 } }
172191 />
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+ ) }
173197 </ div >
174- { selectedDatabase && loaded && (
198+ { selectedDatabase && ! isDatabaseEmpty && loaded && (
175199 < >
176200 < br />
177201 < div style = { { display : 'flex' , justifyContent : 'space-between' } } >
0 commit comments