我一直在寻找如何在用户的本地帐户或任何网络目录帐户(ActiveDir或执行opendir)检测。因此,我已经使用开放式目录框架做的是这样的:
- 获取缺省ODSession会议
- 获得本地节点 - kODNodeTypeLocalNodes(我不想查询发送到服务器的所有时间)
- 查询与如发现查询值设置为当前用户的主目录
- 节点kODAttributeTypeNFSHomeDirectory则意味着用户是本地的,如果不是(bacause我们查询本地节点ONY) - 用户网络帐户
所以是这样的:
static BOOL isLocalUser = NO;
static BOOL shouldKeepRunning = YES; // global
-(BOOL)isLocalUser
{
isLocalUser = NO; // set default to NO here
NSError* err;
ODSession *mySession = [ODSession defaultSession];
ODNode *myNode = [ODNode nodeWithSession:mySession type:kODNodeTypeLocalNodes error:&err];
ODQuery *myQuery = [ODQuery queryWithNode: myNode
forRecordTypes: kODRecordTypeUsers
attribute: kODAttributeTypeNFSHomeDirectory
matchType: kODMatchEqualTo
queryValues: NSHomeDirectory()
returnAttributes: kODAttributeTypeStandardOnly
maximumResults: 0
error: &err];
[myQuery retain];
[myQuery setDelegate: self];
[myQuery scheduleInRunLoop: [NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
NSRunLoop *theRunLoop = [NSRunLoop currentRunLoop];
while (shouldKeepRunning && [theRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
return isLocalUser;
}
- (void)query:(ODQuery *)inSearch foundResults:(NSArray *)inResults error:(NSError *)inError
{
if (!inResults && !inError)
{
[inSearch removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inSearch release];
shouldKeepRunning = NO; // end of search
}
...
// check what you found here
// if found any nodes, user is local so
isLocalUser = YES;
}
另一个想法是使用身份服务:
- 获取当前用户的身份(CSIdentityQueryCreateForCurrentUser)
- 从(CSIdentityGetAuthority)获得权威
- 看如果是地方当局(CSGetLocalIdentityAuthority)
希望这可以帮助。