CakePHP LDAP/MySQL混合模型


CakePHP LDAP/MySQL Hybrid Model

我在CakePHP中有一个模型(Person),它代表MySQL表中的用户。模型中的字段之一是Active Directory中用户的用户ID。我还实现了一个LdapUser模型,它正确地处理对AD对象的查询,并使用useTable=false设置。

我想在Person模型中添加一个字段,指示用户当前是否在AD中被禁用。我知道如何处理所有LDAP查询业务,但问题是我不知道如何将此属性添加到模型中。我的第一个想法是添加一个静态虚拟字段,该字段在使用LdapUser模型和ClassRegistry::init('dapUser')构建Person模型的过程中设置。然而,这并不起作用,因为虚拟字段只是SQL别名,因此CakePHP不会从字面上接受我为虚拟字段设置的值。相反,它尝试将其形成查询。

有没有一种方法可以在模型中设置静态字段值,即使模型是从数据库表中读取的?

好的实现将是一种行为。这样,您可以分离所有LDAP逻辑,但仍然可以通过Person模型访问它。你现在所做的设置似乎不符合逻辑,只有一个人,所以这是一个模型。更好地连接模型背面的LDAP部分。

关于残疾人的问题:例如,您可以使用beforeFind方法加载行为。通过这种方式,您可以决定例如永远不能加载用户,或者可以将禁用标志添加到数据中。

通常,只有模型中一个名为:isDisabled()的方法才能回答您的问题。在这种情况下不需要虚拟字段。