@@ -32,6 +32,7 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
32
32
const [ allowCompleted , setAllowCompleted ] = useState ( false ) ;
33
33
const [ usersCompleted , setUsersCompleted ] = useState ( false ) ;
34
34
const [ failed , setFailed ] = useState ( false ) ;
35
+ const [ isDatabaseEmpty , setIsDatabaseEmpty ] = useState ( false ) ;
35
36
36
37
useEffect ( ( ) => {
37
38
if ( ! open ) {
@@ -75,35 +76,48 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
75
76
76
77
const handleDatabaseSelect = ( selectedOption ) => {
77
78
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
+ } ) ;
79
90
} ;
80
91
81
92
const handleSave = async ( ) => {
82
93
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 (
97
96
driver ,
98
- selectedDatabase ,
99
97
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 (
107
121
driver ,
108
122
selectedDatabase ,
109
123
currentRole ,
@@ -113,14 +127,18 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
113
127
( ) => setAllowCompleted ( true ) ,
114
128
( failReason ) => setFailed ( `Operation 'ALLOW LABEL ACCESS' failed.\n Reason: ${ failReason } ` )
115
129
) ;
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 ( ) ;
122
141
}
123
- handleClose ( ) ;
124
142
} ;
125
143
126
144
return (
@@ -171,8 +189,13 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
171
189
onChange : handleDatabaseSelect ,
172
190
} }
173
191
/>
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
+ ) }
174
197
</ div >
175
- { selectedDatabase && loaded && (
198
+ { selectedDatabase && ! isDatabaseEmpty && loaded && (
176
199
< >
177
200
< br />
178
201
< div style = { { display : 'flex' , justifyContent : 'space-between' } } >
0 commit comments