From 4b45d7680560b4c01fa3a182447e7134b66bc141 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 1 Dec 2011 22:53:11 +0000 Subject: [PATCH] Monotone-Parent: 171356cc20f8175f3b04a099c5f8098f50368f02 Monotone-Revision: a595c6678cfaad2fff0628a98bf8c21916a644d9 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-12-01T22:53:11 Monotone-Branch: ca.inverse.sogo --- OpenChange/MAPIStoreFSFolder.m | 41 +++++++++++++++++++++++++++++++++ OpenChange/MAPIStoreFSMessage.m | 22 ++++++++++++++---- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/OpenChange/MAPIStoreFSFolder.m b/OpenChange/MAPIStoreFSFolder.m index 21b345fb5..615e3b21c 100644 --- a/OpenChange/MAPIStoreFSFolder.m +++ b/OpenChange/MAPIStoreFSFolder.m @@ -27,7 +27,9 @@ #import #import #import +#import #import "EOQualifier+MAPI.h" +#import "MAPIStoreContext.h" #import "MAPIStoreFSFolderTable.h" #import "MAPIStoreFSMessage.h" #import "MAPIStoreFSMessageTable.h" @@ -237,4 +239,43 @@ static Class EOKeyValueQualifierK; return rights; } +- (BOOL) _testRoleForActiveUser: (NSString *) role +{ + SOGoUser *activeUser; + NSArray *roles; + + activeUser = [[self context] activeUser]; + + roles = [[self aclFolder] aclsForUser: [activeUser login]]; + + return [roles containsObject: role]; +} + +- (BOOL) subscriberCanCreateMessages +{ + return [self _testRoleForActiveUser: @"RightsCreateItems"]; +} + +- (BOOL) subscriberCanModifyMessages +{ + return ([self _testRoleForActiveUser: @"RightsEditAll"] + || [self _testRoleForActiveUser: @"RightsEditOwn"]); +} + +- (BOOL) subscriberCanReadMessages +{ + return [self _testRoleForActiveUser: @"RightsReadItems"]; +} + +- (BOOL) subscriberCanDeleteMessages +{ + return ([self _testRoleForActiveUser: @"RightsDeleteAll"] + || [self _testRoleForActiveUser: @"RightsDeleteOwn"]); +} + +- (BOOL) subscriberCanCreateSubFolders +{ + return [self _testRoleForActiveUser: @"RightsCreateSubfolders"]; +} + @end diff --git a/OpenChange/MAPIStoreFSMessage.m b/OpenChange/MAPIStoreFSMessage.m index f02262cee..161359e8b 100644 --- a/OpenChange/MAPIStoreFSMessage.m +++ b/OpenChange/MAPIStoreFSMessage.m @@ -28,6 +28,7 @@ #import "MAPIStorePropertySelectors.h" #import "SOGoMAPIFSMessage.h" +#import "MAPIStoreFSFolder.h" #import "MAPIStoreFSMessage.h" #import "MAPIStoreTypes.h" #import "NSData+MAPIStore.h" @@ -83,16 +84,29 @@ [properties removeAllObjects]; } -- (BOOL) subscriberCanReadMessage +- (BOOL) _messageIsFreeBusy { - /* This is a HACK until we figure out how to determine a message position in - the mailbox hierarchy.... (missing: folderid and role) */ NSString *msgClass; + /* This is a HACK until we figure out how to determine a message position in + the mailbox hierarchy.... (missing: folderid and role) */ msgClass = [[sogoObject properties] objectForKey: MAPIPropertyKey (PR_MESSAGE_CLASS_UNICODE)]; - return [msgClass isEqualToString: @"IPM.Microsoft.ScheduleData.FreeBusy"]; + return [msgClass isEqualToString: @"IPM.Microsoft.ScheduleData.FreeBusy"]; +} + +/* TODO: differentiate between the "Own" and "All" cases */ +- (BOOL) subscriberCanReadMessage +{ + return ([(MAPIStoreFolder *) container subscriberCanReadMessages] + || [self _messageIsFreeBusy]); +} + +- (BOOL) subscriberCanModifyMessage +{ + return ([(MAPIStoreFolder *) container subscriberCanModifyMessages] + || [self _messageIsFreeBusy]); } - (NSDate *) creationTime