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
812 let current_permission = all_permissions.get(&property_permission.key);812 let current_permission = all_permissions.get(&property_permission.key);
813 if matches![813 if matches![
814 current_permission,814 current_permission,
815 Some(PropertyPermission::AdminConst | PropertyPermission::ItemOwnerConst)815 Some(PropertyPermission { mutable: false, .. })
816 ] {816 ] {
817 return Err(<Error<T>>::NoPermission.into());817 return Err(<Error<T>>::NoPermission.into());
818 }818 }
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
--- a/primitives/data-structs/src/lib.rs
+++ b/primitives/data-structs/src/lib.rs
@@ -635,13 +635,20 @@
 
 #[derive(Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone)]
 #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
-pub enum PropertyPermission {
-	None,
-	AdminConst,
-	Admin,
-	ItemOwnerConst,
-	ItemOwner,
-	ItemOwnerOrAdmin,
+pub struct PropertyPermission {
+	pub mutable: bool,
+	pub collection_admin: bool,
+	pub token_owner: bool,
+}
+
+impl PropertyPermission {
+	pub fn none() -> Self {
+		Self {
+			mutable: true,
+			collection_admin: false,
+			token_owner: false,
+		}
+	}
 }
 
 #[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, MaxEncodedLen)]