From 1ffc1d9cb94465c4e0b0424cd737a086d4a390bd Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 1 Dec 2011 21:29:17 +0000 Subject: [PATCH] Monotone-Parent: d70b16e4de0e51014c13f2e04c41c5dbaca8197a Monotone-Revision: 0520cbbe794e4bb4de915dd4b488e316122faa8a Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-12-01T21:29:17 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 9 +++++++++ OpenChange/MAPIStoreCalendarFolder.m | 6 ++++++ OpenChange/MAPIStoreGCSFolder.h | 1 + OpenChange/MAPIStoreGCSFolder.m | 26 +++++++++++++++----------- OpenChange/MAPIStoreTasksFolder.m | 6 ++++++ 5 files changed, 37 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index b82303340..9ba6123eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2011-12-01 Wolfgang Sourdeau + * OpenChange/MAPIStoreGCSFolder.m (-aclQualifier): new accessor + providing an additional qualifier when listing elements of a + table, based on the current user rights. + (-messageKeysMatchingQualifier:andSortOrderings:): make use of the + new -aclQualifier method when the active user is not the owner of + the sogo object. Slightly simplified code by storing all + qualifiers in an array passed as parameter to the EOAndQualifier + constructor. + * OpenChange/MAPIStoreMessage.m (-subscriberCanReadMessage) (-subscriberCanModifyMessage): new getters for ACL operations at the message level. diff --git a/OpenChange/MAPIStoreCalendarFolder.m b/OpenChange/MAPIStoreCalendarFolder.m index 15c95f96a..8ed3f19ed 100644 --- a/OpenChange/MAPIStoreCalendarFolder.m +++ b/OpenChange/MAPIStoreCalendarFolder.m @@ -190,4 +190,10 @@ != nil); } +- (EOQualifier *) aclQualifier +{ + return [EOQualifier qualifierWithQualifierFormat: + [(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]]; +} + @end diff --git a/OpenChange/MAPIStoreGCSFolder.h b/OpenChange/MAPIStoreGCSFolder.h index f5a43dd2c..91ec334fd 100644 --- a/OpenChange/MAPIStoreGCSFolder.h +++ b/OpenChange/MAPIStoreGCSFolder.h @@ -51,6 +51,7 @@ - (NSArray *) activeUserRoles; /* subclasses */ +- (EOQualifier *) aclQualifier; - (EOQualifier *) componentQualifier; @end diff --git a/OpenChange/MAPIStoreGCSFolder.m b/OpenChange/MAPIStoreGCSFolder.m index cef875a8d..0a88a9a96 100644 --- a/OpenChange/MAPIStoreGCSFolder.m +++ b/OpenChange/MAPIStoreGCSFolder.m @@ -87,7 +87,8 @@ { static NSArray *fields = nil; NSArray *records; - EOQualifier *componentQualifier, *fetchQualifier; + NSMutableArray *qualifierArray; + EOQualifier *fetchQualifier, *aclQualifier; GCSFolder *ocsFolder; EOFetchSpecification *fs; NSArray *keys; @@ -96,24 +97,27 @@ fields = [[NSArray alloc] initWithObjects: @"c_name", @"c_version", nil]; - componentQualifier = [self componentQualifier]; - if (qualifier) + qualifierArray = [NSMutableArray new]; + if (![[context activeUser] isEqual: [context ownerUser]]) { - fetchQualifier = [[EOAndQualifier alloc] - initWithQualifiers: - componentQualifier, - qualifier, - nil]; - [fetchQualifier autorelease]; + aclQualifier = [self aclQualifier]; + if (aclQualifier) + [qualifierArray addObject: aclQualifier]; } - else - fetchQualifier = componentQualifier; + [qualifierArray addObject: [self componentQualifier]]; + if (qualifier) + [qualifierArray addObject: qualifier]; + + fetchQualifier = [[EOAndQualifier alloc] + initWithQualifierArray: qualifierArray]; ocsFolder = [sogoObject ocsFolder]; fs = [EOFetchSpecification fetchSpecificationWithEntityName: [ocsFolder folderName] qualifier: fetchQualifier sortOrderings: sortOrderings]; + [fetchQualifier release]; + [qualifierArray release]; records = [ocsFolder fetchFields: fields fetchSpecification: fs]; keys = [records objectsForKey: @"c_name" notFoundMarker: nil]; diff --git a/OpenChange/MAPIStoreTasksFolder.m b/OpenChange/MAPIStoreTasksFolder.m index 83eaea02a..228fb8eb5 100644 --- a/OpenChange/MAPIStoreTasksFolder.m +++ b/OpenChange/MAPIStoreTasksFolder.m @@ -157,4 +157,10 @@ return rights; } +- (EOQualifier *) aclQualifier +{ + return [EOQualifier qualifierWithQualifierFormat: + [(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]]; +} + @end