@@ -344,7 +344,7 @@ pub(crate) fn set_target_function_role<'a>(
344
344
only_authorized ( ctx) ?;
345
345
346
346
for selector in selectors {
347
- _set_target_function_role ( ctx, target, selector, role_id) ;
347
+ _set_target_function_role ( ctx, target, selector, role_id) ? ;
348
348
}
349
349
350
350
Ok ( ( ) )
@@ -358,14 +358,23 @@ fn _set_target_function_role(
358
358
target : & Addr ,
359
359
selector : & Selector ,
360
360
role_id : RoleId ,
361
- ) {
361
+ ) -> Result < ( ) , ContractError > {
362
+ if selector. is_internal ( ) {
363
+ return Err ( ContractError :: AccessManager (
364
+ AccessManagerError :: InternalSelector ( selector. to_owned ( ) ) ,
365
+ ) ) ;
366
+ }
367
+
362
368
ctx. storage ( )
363
369
. write :: < TargetAllowedRoles > ( & ( target. clone ( ) , selector. to_owned ( ) ) , & role_id) ;
370
+
364
371
ctx. emit ( TargetFunctionRoleUpdated {
365
372
target,
366
373
selector,
367
374
role_id,
368
375
} ) ;
376
+
377
+ Ok ( ( ) )
369
378
}
370
379
371
380
/// See [`ExecuteMsg::SetTargetAdminDelay`].
@@ -986,7 +995,12 @@ pub(crate) fn can_call(
986
995
target : & Addr ,
987
996
selector : & Selector ,
988
997
) -> Result < CanCall , ContractError > {
989
- if is_target_closed ( ctx, target) ? {
998
+ if selector. is_internal ( ) {
999
+ Ok ( CanCall {
1000
+ allowed : true ,
1001
+ delay : 0 ,
1002
+ } )
1003
+ } else if is_target_closed ( ctx, target) ? {
990
1004
Ok ( CanCall {
991
1005
allowed : false ,
992
1006
delay : 0 ,
@@ -1046,6 +1060,12 @@ pub(crate) fn get_target_function_role(
1046
1060
target : & Addr ,
1047
1061
selector : & Selector ,
1048
1062
) -> Result < RoleId , ContractError > {
1063
+ if selector. is_internal ( ) {
1064
+ return Err ( ContractError :: AccessManager (
1065
+ AccessManagerError :: InternalSelector ( selector. to_owned ( ) ) ,
1066
+ ) ) ;
1067
+ }
1068
+
1049
1069
Ok ( ctx
1050
1070
. storage ( )
1051
1071
. maybe_read :: < TargetAllowedRoles > ( & ( target. clone ( ) , selector. to_owned ( ) ) ) ?
0 commit comments