Monotone-Parent: d70b16e4de0e51014c13f2e04c41c5dbaca8197a

Monotone-Revision: 0520cbbe794e4bb4de915dd4b488e316122faa8a

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2011-12-01T21:29:17
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2011-12-01 21:29:17 +00:00
parent a16bf2c00e
commit 1ffc1d9cb9
5 changed files with 37 additions and 11 deletions

View File

@ -1,5 +1,14 @@
2011-12-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* 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.

View File

@ -190,4 +190,10 @@
!= nil);
}
- (EOQualifier *) aclQualifier
{
return [EOQualifier qualifierWithQualifierFormat:
[(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]];
}
@end

View File

@ -51,6 +51,7 @@
- (NSArray *) activeUserRoles;
/* subclasses */
- (EOQualifier *) aclQualifier;
- (EOQualifier *) componentQualifier;
@end

View File

@ -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];

View File

@ -157,4 +157,10 @@
return rights;
}
- (EOQualifier *) aclQualifier
{
return [EOQualifier qualifierWithQualifierFormat:
[(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]];
}
@end