difftreelog
Change PropertyPermission
in: master
3 files changed
pallets/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());
}
pallets/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
+ }
+ }
}
}
primitives/data-structs/src/lib.rsdiffbeforeafterboth635635636#[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}643644impl PropertyPermission {645 pub fn none() -> Self {646 Self {647 mutable: true,648 collection_admin: false,649 token_owner: false,650 }651 }652}646653647#[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))]