pub async fn revoke_role<T: Transport + ?Sized>(
transport: &T,
community: &Community,
member: PublicKey,
role_id: &str,
) -> Result<(), String>Expand description
Revoke a role from member (owner/admin authority) — instant logical (the role record is
dropped, so the grant-set check stops honoring their actions). The physical lockout
(channel rekey per) is a later step; this only edits the grant. In the MVP a role is permission
bits, NOT a channel read key (channels aren’t role-gated), so a revoke needs NO rekey and a bunker
account can do it freely. WHEN role-gated channels ship, the rekey-on-revoke path must adopt the same
bunker fail-fast guard as publish_banlist/revoke_public_invite (a rekey needs a raw local key).