@@ -26,9 +26,10 @@ pub mod uid;
26
26
pub mod update;
27
27
28
28
use crate :: handlers:: http:: rbac:: RBACError ;
29
+ use crate :: parseable:: PARSEABLE ;
29
30
use crate :: query:: { TableScanVisitor , QUERY_SESSION } ;
30
31
use crate :: rbac:: map:: SessionKey ;
31
- use crate :: rbac:: role:: { Action , Permission } ;
32
+ use crate :: rbac:: role:: { Action , ParseableResourceType , Permission } ;
32
33
use crate :: rbac:: Users ;
33
34
use actix:: extract_session_key_from_req;
34
35
use actix_web:: HttpRequest ;
@@ -113,14 +114,33 @@ pub fn user_auth_for_datasets(
113
114
authorized = true ;
114
115
break ;
115
116
}
116
- Permission :: Resource (
117
- Action :: Query ,
118
- crate :: rbac:: role:: ParseableResourceType :: Stream ( stream) ,
119
- ) => {
120
- if stream == table_name || stream == "*" {
117
+ Permission :: Resource ( Action :: Query , ParseableResourceType :: Stream ( stream) ) => {
118
+ let is_internal = PARSEABLE . get_stream ( table_name) . is_ok_and ( |stream| {
119
+ stream
120
+ . get_stream_type ( )
121
+ . eq ( & crate :: storage:: StreamType :: Internal )
122
+ } ) ;
123
+
124
+ if stream == table_name || stream == "*" || is_internal {
121
125
authorized = true ;
122
126
}
123
127
}
128
+ Permission :: Resource ( action, ParseableResourceType :: All )
129
+ if ![
130
+ Action :: All ,
131
+ Action :: PutUser ,
132
+ Action :: PutRole ,
133
+ Action :: DeleteUser ,
134
+ Action :: DeleteRole ,
135
+ Action :: ModifyUserGroup ,
136
+ Action :: CreateUserGroup ,
137
+ Action :: DeleteUserGroup ,
138
+ Action :: DeleteNode ,
139
+ ]
140
+ . contains ( action) =>
141
+ {
142
+ authorized = true ;
143
+ }
124
144
_ => ( ) ,
125
145
}
126
146
}
0 commit comments