@@ -26,9 +26,10 @@ pub mod uid;
2626pub mod update;
2727
2828use crate :: handlers:: http:: rbac:: RBACError ;
29+ use crate :: parseable:: PARSEABLE ;
2930use crate :: query:: { TableScanVisitor , QUERY_SESSION } ;
3031use crate :: rbac:: map:: SessionKey ;
31- use crate :: rbac:: role:: { Action , Permission } ;
32+ use crate :: rbac:: role:: { Action , ParseableResourceType , Permission } ;
3233use crate :: rbac:: Users ;
3334use actix:: extract_session_key_from_req;
3435use actix_web:: HttpRequest ;
@@ -113,14 +114,33 @@ pub fn user_auth_for_datasets(
113114 authorized = true ;
114115 break ;
115116 }
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 {
121125 authorized = true ;
122126 }
123127 }
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+ }
124144 _ => ( ) ,
125145 }
126146 }
0 commit comments