git.delta.rocks / unique-network / refs/commits / 399cd1708061

difftreelog

Change PropertyPermission

Daniel Shiposha2022-05-06parent: #36342f0.patch.diff
in: master

3 files changed

modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -812,7 +812,7 @@
 		let current_permission = all_permissions.get(&property_permission.key);
 		if matches![
 			current_permission,
-			Some(PropertyPermission::AdminConst | PropertyPermission::ItemOwnerConst)
+			Some(PropertyPermission { mutable: false, .. })
 		] {
 			return Err(<Error<T>>::NoPermission.into());
 		}
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -321,7 +321,7 @@
 		let permission = <PalletCommon<T>>::property_permissions(collection.id)
 			.get(property_key)
 			.map(|p| p.clone())
-			.unwrap_or(PropertyPermission::None);
+			.unwrap_or(PropertyPermission::none());
 
 		let token_data = <TokenData<T>>::get((collection.id, token_id))
 			.ok_or(<CommonError<T>>::TokenNotFound)?;
@@ -335,15 +335,28 @@
 			.get_property(property_key)
 			.is_some();
 
-		match (permission, is_property_exists) {
-			(PropertyPermission::AdminConst, false) => collection.check_is_owner_or_admin(sender),
-			(PropertyPermission::Admin, _) => collection.check_is_owner_or_admin(sender),
-			(PropertyPermission::ItemOwnerConst, false) => check_token_owner(),
-			(PropertyPermission::ItemOwner, _) => check_token_owner(),
-			(PropertyPermission::ItemOwnerOrAdmin, _) => {
-				check_token_owner().or(collection.check_is_owner_or_admin(sender))
+		match permission {
+			PropertyPermission { mutable: false, .. } if is_property_exists => {
+				Err(<CommonError<T>>::NoPermission.into())
 			}
-			_ => Err(<CommonError<T>>::NoPermission.into()),
+
+			PropertyPermission {
+				collection_admin,
+				token_owner,
+				..
+			} => {
+				let mut check_result = Err(<CommonError<T>>::NoPermission.into());
+
+				if collection_admin {
+					check_result = collection.check_is_owner_or_admin(sender);
+				}
+
+				if token_owner {
+					check_result.or(check_token_owner())
+				} else {
+					check_result
+				}
+			}
 		}
 	}
 
modifiedprimitives/data-structs/src/lib.rsdiffbeforeafterboth
635635
636#[derive(Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone)]636#[derive(Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone)]
637#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]637#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
638pub enum PropertyPermission {638pub struct PropertyPermission {
639 None,639 pub mutable: bool,
640 AdminConst,640 pub collection_admin: bool,
641 Admin,641 pub token_owner: bool,
642 ItemOwnerConst,
643 ItemOwner,
644 ItemOwnerOrAdmin,
645}642}
643
644impl PropertyPermission {
645 pub fn none() -> Self {
646 Self {
647 mutable: true,
648 collection_admin: false,
649 token_owner: false,
650 }
651 }
652}
646653
647#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, MaxEncodedLen)]654#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, MaxEncodedLen)]
648#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]655#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]