diff --git a/substrate/frame/nomination-pools/src/lib.rs b/substrate/frame/nomination-pools/src/lib.rs index 017eac8ee2..0fff470eec 100644 --- a/substrate/frame/nomination-pools/src/lib.rs +++ b/substrate/frame/nomination-pools/src/lib.rs @@ -1854,21 +1854,16 @@ pub mod pallet { nominator: Option, state_toggler: Option, ) -> DispatchResult { - let o1 = origin; - let o2 = o1.clone(); - - let mut bonded_pool = BondedPool::::get(pool_id).ok_or(Error::::PoolNotFound)?; - let is_pool_root = || -> Result<(), sp_runtime::DispatchError> { - let who = ensure_signed(o1)?; - ensure!(bonded_pool.can_update_roles(&who), Error::::DoesNotHavePermission); - Ok(()) + let mut bonded_pool = match ensure_root(origin.clone()) { + Ok(()) => BondedPool::::get(pool_id).ok_or(Error::::PoolNotFound)?, + Err(frame_support::error::BadOrigin) => { + let who = ensure_signed(origin)?; + let bonded_pool = + BondedPool::::get(pool_id).ok_or(Error::::PoolNotFound)?; + ensure!(bonded_pool.can_update_roles(&who), Error::::DoesNotHavePermission); + bonded_pool + }, }; - let is_root = || -> Result<(), sp_runtime::DispatchError> { - ensure_root(o2)?; - Ok(()) - }; - - let _ = is_root().or_else(|_| is_pool_root())?; match root { None => (),