From dcb1d2f57459d5760a17ad69d12e3fb2af6d1ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Thu, 28 Jan 2016 15:47:17 +0100 Subject: [PATCH] oc: API to know if a message can be deleted by a subscriber Instead of asking general container. This gives the possibility to perform the deletion depending on the data from the message, for instance, the user creator. --- OpenChange/MAPIStoreFolder.m | 2 +- OpenChange/MAPIStoreMessage.h | 1 + OpenChange/MAPIStoreMessage.m | 14 +++++++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index 48c762499..0d14550e1 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -597,7 +597,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe if ([[context activeUser] isEqual: ownerUser] || (![message isKindOfClass: MAPIStoreFAIMessageK] - && [self subscriberCanDeleteMessages])) + && ([self subscriberCanDeleteMessages] || [message subscriberCanDeleteMessage]))) { /* we ensure the table caches are loaded so that old and new state can be compared */ diff --git a/OpenChange/MAPIStoreMessage.h b/OpenChange/MAPIStoreMessage.h index fd89bb027..2f059733e 100644 --- a/OpenChange/MAPIStoreMessage.h +++ b/OpenChange/MAPIStoreMessage.h @@ -82,6 +82,7 @@ - (BOOL) subscriberCanReadMessage; - (BOOL) subscriberCanModifyMessage; +- (BOOL) subscriberCanDeleteMessage; @end diff --git a/OpenChange/MAPIStoreMessage.m b/OpenChange/MAPIStoreMessage.m index d3ba9aae7..5f341f600 100644 --- a/OpenChange/MAPIStoreMessage.m +++ b/OpenChange/MAPIStoreMessage.m @@ -547,7 +547,8 @@ rtf2html (NSData *compressedRTF) for (count = 0; count < max; count++) [[containerTables objectAtIndex: count] restrictedChildKeys]; } - + + /* TODO: Check the save process succeeded */ [self save: memCtx]; /* We make sure that any change-related properties are removed from the properties dictionary, to make sure that related methods will be @@ -649,8 +650,7 @@ rtf2html (NSData *compressedRTF) if (userIsOwner || ([self isKindOfClass: MAPIStoreEmbeddedMessageK] && [mainMessage subscriberCanModifyMessage]) - || [(MAPIStoreFolder *) - [mainMessage container] subscriberCanDeleteMessages]) + || [mainMessage subscriberCanDeleteMessage]) access |= 0x04; *data = MAPILongValue (memCtx, access); @@ -987,14 +987,22 @@ rtf2html (NSData *compressedRTF) return activeUserRoles; } +/* Can the current active user read the message? */ - (BOOL) subscriberCanReadMessage { return NO; } +/* Can the current active user modify the message? */ - (BOOL) subscriberCanModifyMessage { return NO; } +/* Can the current active user delete the message? */ +- (BOOL) subscriberCanDeleteMessage +{ + return NO; +} + @end