From e80aab115de301d295854a631d1de954686a853e Mon Sep 17 00:00:00 2001 From: Shanin Roman Date: Tue, 5 Mar 2024 11:45:04 +0300 Subject: [PATCH] [feature] #4244: Allow granting/revoking role's permissions Signed-off-by: Shanin Roman --- client/tests/integration/roles.rs | 84 ++++++++++++++++++ configs/swarm/executor.wasm | Bin 589276 -> 591904 bytes core/src/smartcontracts/isi/mod.rs | 2 + core/src/smartcontracts/isi/world.rs | 60 +++++++++++++ data_model/src/events/data/events.rs | 12 ++- data_model/src/isi.rs | 32 ++++++- data_model/src/lib.rs | 2 + data_model/src/visit.rs | 6 ++ docs/source/references/schema.json | 69 +++++++++++--- schema/gen/src/lib.rs | 2 +- smart_contract/executor/derive/src/default.rs | 2 + smart_contract/executor/src/default.rs | 54 ++++++++++- 12 files changed, 301 insertions(+), 24 deletions(-) diff --git a/client/tests/integration/roles.rs b/client/tests/integration/roles.rs index a0a33516473..94feb92a082 100644 --- a/client/tests/integration/roles.rs +++ b/client/tests/integration/roles.rs @@ -215,3 +215,87 @@ fn role_permissions_unified() { "permission tokens for role aren't deduplicated" ); } + +#[test] +fn grant_revoke_role_permissions() -> Result<()> { + let chain_id = ChainId::from("0"); + + let (_rt, _peer, test_client) = ::new().with_port(11_245).start_with_runtime(); + wait_for_genesis_committed(&vec![test_client.clone()], 0); + + let alice_id = AccountId::from_str("alice@wonderland")?; + let mouse_id = AccountId::from_str("mouse@wonderland")?; + + // Registering Mouse + let mouse_key_pair = KeyPair::generate(); + let register_mouse = Register::account(Account::new( + mouse_id.clone(), + mouse_key_pair.public_key().clone(), + )); + test_client.submit_blocking(register_mouse)?; + + // Registering role + let role_id = RoleId::from_str("ACCESS_TO_MOUSE_METADATA")?; + let role = Role::new(role_id.clone()); + let register_role = Register::role(role); + test_client.submit_blocking(register_role)?; + + // Transfer domain ownership to Mouse + let domain_id = DomainId::from_str("wonderland")?; + let transfer_domain = Transfer::domain(alice_id.clone(), domain_id, mouse_id.clone()); + test_client.submit_blocking(transfer_domain)?; + + // Mouse grants role to Alice + let grant_role = Grant::role(role_id.clone(), alice_id.clone()); + let grant_role_tx = TransactionBuilder::new(chain_id.clone(), mouse_id.clone()) + .with_instructions([grant_role]) + .sign(&mouse_key_pair); + test_client.submit_transaction_blocking(&grant_role_tx)?; + + let set_key_value = SetKeyValue::account( + mouse_id.clone(), + Name::from_str("key").expect("Valid"), + Value::String("value".to_owned()), + ); + let permission = PermissionToken::new( + "CanSetKeyValueInUserAccount".parse()?, + &json!({ "account_id": mouse_id }), + ); + let grant_role_permission = Grant::role_permission(permission.clone(), role_id.clone()); + let revoke_role_permission = Revoke::role_permission(permission.clone(), role_id.clone()); + + // Alice can't modify Mouse's metadata without proper permission token + let found_permissions = test_client + .request(FindPermissionTokensByAccountId::new(alice_id.clone()))? + .collect::>>()?; + assert!(!found_permissions.contains(&permission)); + let _ = test_client + .submit_blocking(set_key_value.clone()) + .expect_err("shouldn't be able to modify metadata"); + + // Alice can modify Mouse's metadata after permission token is granted to role + let grant_role_permission_tx = TransactionBuilder::new(chain_id.clone(), mouse_id.clone()) + .with_instructions([grant_role_permission]) + .sign(&mouse_key_pair); + test_client.submit_transaction_blocking(&grant_role_permission_tx)?; + let found_permissions = test_client + .request(FindPermissionTokensByAccountId::new(alice_id.clone()))? + .collect::>>()?; + assert!(found_permissions.contains(&permission)); + test_client.submit_blocking(set_key_value.clone())?; + + // Alice can't modify Mouse's metadata after permission token is removed from role + let revoke_role_permission_tx = TransactionBuilder::new(chain_id.clone(), mouse_id.clone()) + .with_instructions([revoke_role_permission]) + .sign(&mouse_key_pair); + test_client.submit_transaction_blocking(&revoke_role_permission_tx)?; + let found_permissions = test_client + .request(FindPermissionTokensByAccountId::new(alice_id.clone()))? + .collect::>>()?; + assert!(!found_permissions.contains(&permission)); + let _ = test_client + .submit_blocking(set_key_value.clone()) + .expect_err("shouldn't be able to modify metadata"); + + Ok(()) +} diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index 48ec36119adae5471cb31dd13691f664e1b46b2a..435df040c277d8010896fb21b6ea70dd69cf586c 100644 GIT binary patch delta 133506 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 r{&lyW->Jv_&cXgZpy5>FSPp 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 sub_isi.execute(authority, wsv), Self::Role(sub_isi) => sub_isi.execute(authority, wsv), + Self::RolePermissionToken(sub_isi) => sub_isi.execute(authority, wsv), } } } @@ -218,6 +219,7 @@ impl Execute for RevokeBox { match self { Self::PermissionToken(sub_isi) => sub_isi.execute(authority, wsv), Self::Role(sub_isi) => sub_isi.execute(authority, wsv), + Self::RolePermissionToken(sub_isi) => sub_isi.execute(authority, wsv), } } } diff --git a/core/src/smartcontracts/isi/world.rs b/core/src/smartcontracts/isi/world.rs index 44ae2f2eb2e..1b768138e14 100644 --- a/core/src/smartcontracts/isi/world.rs +++ b/core/src/smartcontracts/isi/world.rs @@ -174,6 +174,66 @@ pub mod isi { } } + impl Execute for Grant { + #[metrics(+"grant_role_permission")] + fn execute(self, _authority: &AccountId, wsv: &mut WorldStateView) -> Result<(), Error> { + let role_id = self.destination_id; + let permission_token = self.object; + let permission_token_id = permission_token.definition_id.clone(); + + if !wsv + .permission_token_schema() + .token_ids + .contains(&permission_token_id) + { + return Err(FindError::PermissionToken(permission_token_id).into()); + } + + let Some(role) = wsv.world.roles.get_mut(&role_id) else { + return Err(FindError::Role(role_id).into()); + }; + + if !role.permissions.insert(permission_token.clone()) { + return Err(RepetitionError { + instruction_type: InstructionType::Grant, + id: permission_token.definition_id.into(), + } + .into()); + } + + wsv.emit_events(Some(RoleEvent::PermissionAdded(RolePermissionChanged { + role_id, + permission_token_id, + }))); + + Ok(()) + } + } + + impl Execute for Revoke { + #[metrics(+"grant_role_permission")] + fn execute(self, _authority: &AccountId, wsv: &mut WorldStateView) -> Result<(), Error> { + let role_id = self.destination_id; + let permission_token = self.object; + let permission_token_id = permission_token.definition_id.clone(); + + let Some(role) = wsv.world.roles.get_mut(&role_id) else { + return Err(FindError::Role(role_id).into()); + }; + + if !role.permissions.remove(&permission_token) { + return Err(FindError::PermissionToken(permission_token_id).into()); + } + + wsv.emit_events(Some(RoleEvent::PermissionRemoved(RolePermissionChanged { + role_id, + permission_token_id, + }))); + + Ok(()) + } + } + impl Execute for SetParameter { #[metrics(+"set_parameter")] fn execute(self, _authority: &AccountId, wsv: &mut WorldStateView) -> Result<(), Error> { diff --git a/data_model/src/events/data/events.rs b/data_model/src/events/data/events.rs index c08b9e504c0..38eda004fe4 100644 --- a/data_model/src/events/data/events.rs +++ b/data_model/src/events/data/events.rs @@ -246,7 +246,11 @@ mod role { /// [`PermissionToken`]s with particular [`Id`](crate::permission::token::PermissionTokenId) /// were removed from the role. #[has_origin(permission_removed => &permission_removed.role_id)] - PermissionRemoved(PermissionRemoved), + PermissionRemoved(RolePermissionChanged), + /// [`PermissionToken`]s with particular [`Id`](crate::permission::token::PermissionTokenId) + /// were removed from the role. + #[has_origin(permission_added => &permission_added.role_id)] + PermissionAdded(RolePermissionChanged), } } @@ -254,7 +258,7 @@ mod role { pub mod model { use super::*; - /// Information about permissions removed from [`Role`] + /// Depending on the wrapping event, [`RolePermissionChanged`] role represents the added or removed role's permission #[derive( Debug, Clone, @@ -271,7 +275,7 @@ mod role { )] #[getset(get = "pub")] #[ffi_type] - pub struct PermissionRemoved { + pub struct RolePermissionChanged { pub role_id: RoleId, // TODO: Skipped temporarily because of FFI #[getset(skip)] @@ -655,7 +659,7 @@ pub mod prelude { executor::{ExecutorEvent, ExecutorFilter}, peer::{PeerEvent, PeerEventFilter, PeerFilter}, permission::PermissionTokenSchemaUpdateEvent, - role::{PermissionRemoved, RoleEvent, RoleEventFilter, RoleFilter}, + role::{RoleEvent, RoleEventFilter, RoleFilter, RolePermissionChanged}, trigger::{ TriggerEvent, TriggerEventFilter, TriggerFilter, TriggerNumberOfExecutionsChanged, }, diff --git a/data_model/src/isi.rs b/data_model/src/isi.rs index 178f1617bf6..bedb511c7d6 100644 --- a/data_model/src/isi.rs +++ b/data_model/src/isi.rs @@ -173,8 +173,10 @@ impl_instruction! { Transfer, Grant, Grant, + Grant, Revoke, Revoke, + Revoke, SetParameter, NewParameter, Upgrade, @@ -971,6 +973,16 @@ mod transparent { } } + impl Grant { + /// Constructs a new [`Grant`] for giving a [`PermissionToken`] to [`Role`]. + pub fn role_permission(permission_token: PermissionToken, to: RoleId) -> Self { + Self { + object: permission_token, + destination_id: to, + } + } + } + impl_display! { Grant where @@ -985,7 +997,8 @@ mod transparent { impl_into_box! { Grant | - Grant + Grant | + Grant => GrantBox => InstructionBox[Grant], => GrantBoxRef<'a> => InstructionBoxRef<'a>[Grant] } @@ -1021,6 +1034,16 @@ mod transparent { } } + impl Revoke { + /// Constructs a new [`Revoke`] for removing a [`PermissionToken`] from [`Role`]. + pub fn role_permission(permission_token: PermissionToken, from: RoleId) -> Self { + Self { + object: permission_token, + destination_id: from, + } + } + } + impl_display! { Revoke where @@ -1035,7 +1058,8 @@ mod transparent { impl_into_box! { Revoke | - Revoke + Revoke | + Revoke => RevokeBox => InstructionBox[Revoke], => RevokeBoxRef<'a> => InstructionBoxRef<'a>[Revoke] } @@ -1327,6 +1351,8 @@ isi_box! { PermissionToken(Grant), /// Grant [`Role`] to [`Account`]. Role(Grant), + /// Grant [`PermissionToken`] to [`Role`]. + RolePermissionToken(Grant), } } @@ -1342,6 +1368,8 @@ isi_box! { PermissionToken(Revoke), /// Revoke [`Role`] from [`Account`]. Role(Revoke), + /// Revoke [`PermissionToken`] from [`Account`]. + RolePermissionToken(Revoke), } } diff --git a/data_model/src/lib.rs b/data_model/src/lib.rs index 9ed47460625..605ada68ec6 100644 --- a/data_model/src/lib.rs +++ b/data_model/src/lib.rs @@ -135,9 +135,11 @@ mod seal { Grant, Grant, + Grant, Revoke, Revoke, + Revoke, SetParameter, NewParameter, diff --git a/data_model/src/visit.rs b/data_model/src/visit.rs index fcae7d5b2d5..6987fa5c59d 100644 --- a/data_model/src/visit.rs +++ b/data_model/src/visit.rs @@ -143,10 +143,12 @@ pub trait Visit { // Visit GrantBox visit_grant_account_permission(&Grant), visit_grant_account_role(&Grant), + visit_grant_role_permission(&Grant), // Visit RevokeBox visit_revoke_account_permission(&Revoke), visit_revoke_account_role(&Revoke), + visit_revoke_role_permission(&Revoke), } } @@ -389,6 +391,7 @@ pub fn visit_grant(visitor: &mut V, authority: &AccountId, is match isi { GrantBox::PermissionToken(obj) => visitor.visit_grant_account_permission(authority, obj), GrantBox::Role(obj) => visitor.visit_grant_account_role(authority, obj), + GrantBox::RolePermissionToken(obj) => visitor.visit_grant_role_permission(authority, obj), } } @@ -396,6 +399,7 @@ pub fn visit_revoke(visitor: &mut V, authority: &AccountId, i match isi { RevokeBox::PermissionToken(obj) => visitor.visit_revoke_account_permission(authority, obj), RevokeBox::Role(obj) => visitor.visit_revoke_account_role(authority, obj), + RevokeBox::RolePermissionToken(obj) => visitor.visit_revoke_role_permission(authority, obj), } } @@ -448,6 +452,8 @@ leaf_visitors! { visit_unregister_role(&Unregister), visit_grant_account_role(&Grant), visit_revoke_account_role(&Revoke), + visit_grant_role_permission(&Grant), + visit_revoke_role_permission(&Revoke), visit_register_trigger(&Register>), visit_unregister_trigger(&Unregister>), visit_mint_trigger_repetitions(&Mint>), diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index 5f85aac7b93..b3e0b69cc87 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -1896,6 +1896,18 @@ } ] }, + "Grant": { + "Struct": [ + { + "name": "object", + "type": "PermissionToken" + }, + { + "name": "destination_id", + "type": "RoleId" + } + ] + }, "Grant": { "Struct": [ { @@ -1919,6 +1931,11 @@ "tag": "Role", "discriminant": 1, "type": "Grant" + }, + { + "tag": "RolePermissionToken", + "discriminant": 2, + "type": "Grant" } ] }, @@ -2924,18 +2941,6 @@ } ] }, - "PermissionRemoved": { - "Struct": [ - { - "name": "role_id", - "type": "RoleId" - }, - { - "name": "permission_token_id", - "type": "Name" - } - ] - }, "PermissionToken": { "Struct": [ { @@ -3577,6 +3582,18 @@ } ] }, + "Revoke": { + "Struct": [ + { + "name": "object", + "type": "PermissionToken" + }, + { + "name": "destination_id", + "type": "RoleId" + } + ] + }, "Revoke": { "Struct": [ { @@ -3600,6 +3617,11 @@ "tag": "Role", "discriminant": 1, "type": "Revoke" + }, + { + "tag": "RolePermissionToken", + "discriminant": 2, + "type": "Revoke" } ] }, @@ -3630,7 +3652,12 @@ { "tag": "PermissionRemoved", "discriminant": 2, - "type": "PermissionRemoved" + "type": "RolePermissionChanged" + }, + { + "tag": "PermissionAdded", + "discriminant": 3, + "type": "RolePermissionChanged" } ] }, @@ -3647,6 +3674,10 @@ { "tag": "ByPermissionRemoved", "discriminant": 2 + }, + { + "tag": "ByPermissionAdded", + "discriminant": 3 } ] }, @@ -3670,6 +3701,18 @@ } ] }, + "RolePermissionChanged": { + "Struct": [ + { + "name": "role_id", + "type": "RoleId" + }, + { + "name": "permission_token_id", + "type": "Name" + } + ] + }, "Schedule": { "Struct": [ { diff --git a/schema/gen/src/lib.rs b/schema/gen/src/lib.rs index fa572e164f6..83de566925e 100644 --- a/schema/gen/src/lib.rs +++ b/schema/gen/src/lib.rs @@ -260,7 +260,7 @@ types!( PeerEventFilter, PeerFilter, PeerId, - PermissionRemoved, + RolePermissionChanged, PermissionToken, PermissionTokenSchema, PermissionTokenSchemaUpdateEvent, diff --git a/smart_contract/executor/derive/src/default.rs b/smart_contract/executor/derive/src/default.rs index 67a7e6cad3d..856ae027138 100644 --- a/smart_contract/executor/derive/src/default.rs +++ b/smart_contract/executor/derive/src/default.rs @@ -155,6 +155,8 @@ pub fn impl_derive_visit(emitter: &mut Emitter, input: &syn2::DeriveInput) -> To "fn visit_unregister_role(operation: &Unregister)", "fn visit_grant_account_role(operation: &Grant)", "fn visit_revoke_account_role(operation: &Revoke)", + "fn visit_grant_role_permission(operation: &Grant)", + "fn visit_revoke_role_permission(operation: &Revoke)", "fn visit_register_trigger(operation: &Register>)", "fn visit_unregister_trigger(operation: &Unregister>)", "fn visit_mint_trigger_repetitions(operation: &Mint>)", diff --git a/smart_contract/executor/src/default.rs b/smart_contract/executor/src/default.rs index 3851b1e03ad..280ef2bcb35 100644 --- a/smart_contract/executor/src/default.rs +++ b/smart_contract/executor/src/default.rs @@ -34,7 +34,8 @@ pub use parameter::{visit_new_parameter, visit_set_parameter}; pub use peer::{visit_register_peer, visit_unregister_peer}; pub use permission_token::{visit_grant_account_permission, visit_revoke_account_permission}; pub use role::{ - visit_grant_account_role, visit_register_role, visit_revoke_account_role, visit_unregister_role, + visit_grant_account_role, visit_grant_role_permission, visit_register_role, + visit_revoke_account_role, visit_revoke_role_permission, visit_unregister_role, }; pub use trigger::{ visit_burn_trigger_repetitions, visit_execute_trigger, visit_mint_trigger_repetitions, @@ -1288,7 +1289,7 @@ pub mod role { use super::*; - macro_rules! impl_validate { + macro_rules! impl_validate_grant_remove_account_role { ($executor:ident, $isi:ident, $authority:ident, $method:ident) => { let role_id = $isi.object(); @@ -1326,6 +1327,35 @@ pub mod role { }; } + macro_rules! impl_validate_grant_revoke_role_permission { + ($executor:ident, $isi:ident, $authority:ident, $method:ident, $isi_type:ty) => { + let role_id = $isi.destination_id().clone(); + let token = $isi.object(); + + if let Ok(any_token) = AnyPermissionToken::try_from(token) { + let token = PermissionToken::from(any_token.clone()); + let isi = <$isi_type>::role_permission(token, role_id); + if is_genesis($executor) { + execute!($executor, isi); + } + if let Err(error) = permission::ValidateGrantRevoke::$method( + &any_token, + $authority, + $executor.block_height(), + ) { + deny!($executor, error); + } + + execute!($executor, isi); + } + + deny!( + $executor, + ValidationFail::NotPermitted(format!("{token:?}: Unknown permission token")) + ); + }; + } + #[allow(clippy::needless_pass_by_value)] pub fn visit_register_role( executor: &mut V, @@ -1383,7 +1413,7 @@ pub mod role { authority: &AccountId, isi: &Grant, ) { - impl_validate!(executor, isi, authority, validate_grant); + impl_validate_grant_remove_account_role!(executor, isi, authority, validate_grant); } pub fn visit_revoke_account_role( @@ -1391,7 +1421,23 @@ pub mod role { authority: &AccountId, isi: &Revoke, ) { - impl_validate!(executor, isi, authority, validate_revoke); + impl_validate_grant_remove_account_role!(executor, isi, authority, validate_revoke); + } + + pub fn visit_grant_role_permission( + executor: &mut V, + authority: &AccountId, + isi: &Grant, + ) { + impl_validate_grant_revoke_role_permission!(executor, isi, authority, validate_grant, Grant); + } + + pub fn visit_revoke_role_permission( + executor: &mut V, + authority: &AccountId, + isi: &Revoke, + ) { + impl_validate_grant_revoke_role_permission!(executor, isi, authority, validate_revoke, Revoke); } }