有没有办法确定登录的帐户是OS X上的本地帐户还是活动目录帐户?如果是,我们如何检索域名?
您可以从用户的用户名为用户创建CBUserIdentity
:
CBUserIdentity* identity = [CBUserIdentity identityWithName:NSUserName() authority:[CBIdentityAuthority defaultIdentityAuthority]];
然后,您可以获取该用户身份的权限:
CBIdentityAuthority* authority = identity.authority;
然后,您可以查看这是否是地方当局(替代方法是托管机构):
if ([authority isEqual:[CBIdentityAuthority localIdentityAuthority])
{
// user is local
}
else
{
// user is managed
}
该机构有一个localizedName
属性,但我认为这不太可能包括域名。我不知道如何得到它。
更新:
这是一种使用 Open Directory API 的方法:
ODSession* session = [ODSession defaultSession];
ODNode* node = [ODNode nodeWithSession:session type:kODNodeTypeAuthentication error:NULL];
ODQuery* query = [ODQuery queryWithNode:node forRecordTypes:kODRecordTypeUsers attribute:kODAttributeTypeRecordName matchType:kODMatchEqualTo queryValues:NSUserName() returnAttributes:kODAttributeTypeStandardOnly maximumResults:0 error:NULL];
NSArray* results = [query resultsAllowingPartial:NO error:NULL];
ODRecord* record = results.firstObject;
此时,您可以查询记录的某些属性。可能感兴趣的一个可能是kODAttributeTypeMetaNodeLocation
:
NSArray* attributes = [record valuesForAttribute:kODAttributeTypeMetaNodeLocation error:NULL];
NSString* attribute = attributes.firstObject;
对于本地帐户,元节点位置应为"/本地/默认"。我使用LDAP帐户进行了测试,并给出了"/LDAPv3/my.ldap.server.example.com"。我没有要测试的活动目录帐户。
或者,您可以尝试 kODAttributeTypeMetaRecordName
.对于本地帐户,返回nil
。对于LDAP帐户,它给出了完全可分辨的名称:"uid=ken,ou=People,dc=example,dc=com"。同样,我不知道它会对Active Directory帐户做什么。
您可以记录记录以查看其他可用的属性。这会将属性键显示为字符串值。你可以在这里尝试找到一个感兴趣的符号常量,或者检查/System/Library/Frameworks/OpenDirectory.framework/Frameworks/CFOpenDirectory.framework/Headers/CFOpenDirectoryConstants.h,了解一些没有记录的常量。
一旦找到您真正关心的内容,您可以通过仅请求这些而不是kODAttributeTypeStandardOnly
来简化查询。此外,您应该考虑异步运行查询,而不是像我在示例代码中那样同步运行查询。
,代码:
NSMutableString *userDataDirectory = [[NSMutableString alloc] initWithString:NSHomeDirectory()];
NSLog(@"%@", userDataDirectory);
打印:/用户/jwlaughton
这是你要找的吗?