Monotone-Parent: d70b16e4de0e51014c13f2e04c41c5dbaca8197a
Monotone-Revision: 0520cbbe794e4bb4de915dd4b488e316122faa8a Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-12-01T21:29:17 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
a16bf2c00e
commit
1ffc1d9cb9
|
@ -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.
|
||||
|
|
|
@ -190,4 +190,10 @@
|
|||
!= nil);
|
||||
}
|
||||
|
||||
- (EOQualifier *) aclQualifier
|
||||
{
|
||||
return [EOQualifier qualifierWithQualifierFormat:
|
||||
[(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
- (NSArray *) activeUserRoles;
|
||||
|
||||
/* subclasses */
|
||||
- (EOQualifier *) aclQualifier;
|
||||
- (EOQualifier *) componentQualifier;
|
||||
|
||||
@end
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -157,4 +157,10 @@
|
|||
return rights;
|
||||
}
|
||||
|
||||
- (EOQualifier *) aclQualifier
|
||||
{
|
||||
return [EOQualifier qualifierWithQualifierFormat:
|
||||
[(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue