認証中に追加の列を確認する必要があるシナリオがあります。これは、アプリケーションが一部のユーザー名をデータベースに保存し、一部を LDAP に保存するためです。認証の優先順位は、データベース内のユーザー名です。ユーザー名がデータベースに存在する場合、LDAP でチェックしません。それ以外の場合は、LDAP でチェックします。
LDAP ユーザーの場合、パスワード列が空白の同じ「ユーザー」テーブルにユーザー名のコピーを保持しています。ユーザーの両方のグループをうんざりさせるために、「LDAP および INTERNAL」という値を持つ userDirectory という追加の列があります。アプリケーション固有の設定とすべてのために、LDAP ユーザー名のコピーを保持する必要があります。
また、username+userDirectory は uniqueKey です
今私の問題は、同じユーザー名を持つが異なるuserDirectoryに複数のユーザーがいる場合があることです。前述のように、LDAP ユーザーはパスワードをデータベースに保存せず、その認証は別のコード スニペットです。
DB認証に以下のコードを使用しています。条件 setCredentialTreatment('md5(?) AND userDirectory="internal"') を追加していますが、LDAP ユーザーも検索しています。userDirectory='internal' でこれを制限するにはどうすればよいですか
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password')
->setCredentialTreatment('md5(?) AND userDirectory="internal"');
$authAdapter->setIdentity($username);
$authAdapter->setCredential($password);