@@ -194,6 +194,8 @@ pub mod pallet {
194194 SecondaryKeyNotAuthorizedForAsset ,
195195 /// The extrinsic expected a different `AuthorizationType` than what the `data.auth_type()` is.
196196 BadAuthorizationType ,
197+ /// Except `ExtrinsicPermissions` are not allowed for external agents.
198+ ExceptPermissionsNotAllowed ,
197199 }
198200
199201 #[ pallet:: call]
@@ -402,16 +404,45 @@ impl<T: Config> Pallet<T> {
402404 fn base_create_group (
403405 origin : OriginFor < T > ,
404406 asset_id : AssetId ,
405- perms : ExtrinsicPermissions ,
407+ extrinsics_permissions : ExtrinsicPermissions ,
406408 ) -> Result < ( IdentityId , AGId ) , DispatchError > {
407- let did = Self :: ensure_perms ( origin, asset_id) ?;
408- <Identity < T > >:: ensure_extrinsic_perms_length_limited ( & perms) ?;
409409 // Fetch the AG id & advance the sequence.
410- let id = AGIdSequence :: < T > :: try_mutate ( asset_id, try_next_pre :: < T , _ > ) ?;
411- // Commit & emit.
412- GroupPermissions :: < T > :: insert ( asset_id, id, perms. clone ( ) ) ;
413- Self :: deposit_event ( Event :: GroupCreated ( did. for_event ( ) , asset_id, id, perms) ) ;
414- Ok ( ( did, id) )
410+ let ag_id = AGIdSequence :: < T > :: try_mutate ( asset_id, try_next_pre :: < T , _ > ) ?;
411+
412+ let caller_did = Self :: validate_set_group_permissions (
413+ origin,
414+ asset_id. clone ( ) ,
415+ & extrinsics_permissions,
416+ & ag_id,
417+ ) ?;
418+
419+ GroupPermissions :: < T > :: insert ( asset_id, ag_id, extrinsics_permissions. clone ( ) ) ;
420+ Self :: deposit_event ( Event :: GroupCreated (
421+ caller_did. for_event ( ) ,
422+ asset_id,
423+ ag_id,
424+ extrinsics_permissions,
425+ ) ) ;
426+ Ok ( ( caller_did, ag_id) )
427+ }
428+
429+ fn validate_set_group_permissions (
430+ origin : OriginFor < T > ,
431+ asset_id : AssetId ,
432+ extrinsics_permissions : & ExtrinsicPermissions ,
433+ ag_id : & AGId ,
434+ ) -> Result < IdentityId , DispatchError > {
435+ if let ExtrinsicPermissions :: Except ( _) = extrinsics_permissions {
436+ return Err ( Error :: < T > :: ExceptPermissionsNotAllowed . into ( ) ) ;
437+ }
438+
439+ let caller_did = Self :: ensure_perms ( origin, asset_id) ?;
440+
441+ Identity :: < T > :: ensure_extrinsic_perms_length_limited ( extrinsics_permissions) ?;
442+
443+ Self :: ensure_custom_agent_group_exists ( & asset_id, ag_id) ?;
444+
445+ Ok ( caller_did)
415446 }
416447
417448 fn base_create_group_and_add_auth (
@@ -434,16 +465,23 @@ impl<T: Config> Pallet<T> {
434465 fn base_set_group_permissions (
435466 origin : OriginFor < T > ,
436467 asset_id : AssetId ,
437- id : AGId ,
438- perms : ExtrinsicPermissions ,
468+ ag_id : AGId ,
469+ extrinsics_permissions : ExtrinsicPermissions ,
439470 ) -> DispatchResult {
440- let did = Self :: ensure_perms ( origin, asset_id) ?. for_event ( ) ;
441- <Identity < T > >:: ensure_extrinsic_perms_length_limited ( & perms) ?;
442- Self :: ensure_custom_agent_group_exists ( & asset_id, & id) ?;
471+ let caller_did = Self :: validate_set_group_permissions (
472+ origin,
473+ asset_id. clone ( ) ,
474+ & extrinsics_permissions,
475+ & ag_id,
476+ ) ?;
443477
444- // Commit & emit.
445- GroupPermissions :: < T > :: insert ( asset_id, id, perms. clone ( ) ) ;
446- Self :: deposit_event ( Event :: GroupPermissionsUpdated ( did, asset_id, id, perms) ) ;
478+ GroupPermissions :: < T > :: insert ( asset_id, ag_id, extrinsics_permissions. clone ( ) ) ;
479+ Self :: deposit_event ( Event :: GroupPermissionsUpdated (
480+ caller_did. for_event ( ) ,
481+ asset_id,
482+ ag_id,
483+ extrinsics_permissions,
484+ ) ) ;
447485 Ok ( ( ) )
448486 }
449487
0 commit comments