我正在尝试使用 LDAP c++ 来确定对象的属性是否可修改。
到目前为止,我已尝试查询架构对象并尝试找到 systemFlags 和可修改属性之间的一些相关性。
但是我无法理解模式中属性的一个硬性且快速的属性,它可以告诉我们属性是否可修改。
例如,即使管理员也无法修改对 AD 完整性很重要的少数属性,但我正在寻找一种方法来预先以编程方式识别这些属性,以便我什至不会尝试触摸它们。
或者还有其他方法来识别这些,我缺少这些。
正如评论中的user207421所指出的,当谈到Azure AD时(或者现在是“Microsoft Entra ID?):
用户修改属性的能力不仅仅取决于属性的架构定义。它还取决于分配给用户的权限。即使是管理员也可能被限制修改对 AD 完整性至关重要的某些属性。
zome 属性本质上是操作性或结构性的,例如那些有助于
Distinguished Name (DN)
或 objectClass
的属性。这些通常是不可修改的,但此属性可能不会在架构中明确说明。
该架构可以告诉您某个属性通常是只读的还是系统专用的,但它可能无法提供有关不可修改属性的所有信息,尤其是那些受权限或其内在性质控制的属性。
因此,要以编程方式识别不可修改的属性,您需要:
systemFlags
和 searchFlags
等标志,以识别通常不可修改的属性。但我正在寻找一种方法来预先以编程方式识别这些属性,这样我就不会尝试触摸它们。
...由于提前识别所有不可修改的属性具有挑战性,我仍然建议设计您的应用程序以优雅地处理修改异常。
含义:捕获与修改尝试相关的错误并适当处理它们。
try {
// Attempt to modify an attribute
modifyAttribute(ld, attributeName, newValue);
} catch (const LDAPModificationException& e) {
// Handle the exception if modification is not allowed
std::cerr << "Modification not allowed: " << e.what() << std::endl;
}