ユーザーのソースとしてLDAPを使用しています。これは正常に機能し、誰でもLDAP情報を使用してログインするだけで、そのユーザーのDrupalユーザーが作成されます。ただし、私たちの要件の1つは、(検索可能な)ユーザーのリストを持つことです。これは、新しいエントリや変更されたエントリがないかLDAPを定期的にチェックし、それらをdrupalユーザーとマージする必要があることを意味します。
LDAP for Drupal 7 module には、LDAPプロビジョニングをトリガーするイベントのリストがあります。そのうちの1つはOn cron runs. Not implemented yet.
これは基本的に必要なものなので、この状態については何も見つかりませんでした。
ウェブサイトを新しいバージョンに移行する際の問題のため、現在コミュニティモジュールを使用するようにすべてを書き直そうとしています。したがって、公式のソリューションをお勧めします。現在、ユーザーリストをLDAPクエリビューに切り替えていますが、これは一時的な解決策にすぎません。
私はLDAPを使用しており、cronの実行に関する機能を実行して、ログインによってまだ作成されていないユーザー(特定の役割の)を自動的に作成しました
これがお役に立てば幸いです
function _synchro_ldap(){
$server = "serveur.com";
$rootdn = "name";
$rootpw = "pwd";
$ds = ldap_connect( $server );
$r = ldap_bind( $ds, $rootdn, $rootpw );
$dn = "OU=AAAAA,OU=BBBB";
$filtre="cn=test";
$sr = ldap_search($ds, $dn, $filtre);
$info = ldap_get_entries($ds, $sr);
for ($i = 0; $i < $info[0]["member"]["count"]; $i++) {
$sr2 = ldap_search($ds, $info[0]["member"][$i], "cn=*");
$info2 = ldap_get_entries($ds, $sr2);
$name = $info2[0]["samaccountname"][0];
$mail = $info2[0]["mail"][0];
$nom = $info2[0]["sn"][0];
$prenom = $info2[0]["givenname"][0];
$dn = $info2[0]["distinguishedname"][0];
if( !empty($mail) && !empty($name) && $name!= "admin" ){
$u = user_load(array("name" => $name));
$m = user_load(array("mail" => $mail));
if( !$u && !$m) { // user does not exist in drupal
// Create a user
$details = array(
'name' => $info2[0]["samaccountname"][0],
'mail' => $info2[0]["mail"][0],
'access' => 0,
'status' => 1,
'ldap_authentified' => TRUE,
'ldap_dn' => $dn,
'ldap_config' => "1"
);
$u = user_save( null, $details ); // Creation du user
$user_id = $u->uid;
user_multiple_role_edit( array( $user_id ), "add_role", $role_id_custom );
}
}
}
ldap_close( $ds );
}
OK。これは古い質問です...しかし、私は何時間もの仕事の後に見つけた答えを出したいと思います。
LDAPからすべてのユーザーをインポートする(つまりDrupalユーザーを作成する)には、まず 'all_employees' on admin/config/people/ldap/queryページ。これは、クエリのマシン名である必要があります。クエリが、必要なすべてのユーザーを返すことを確認してくださいインポート。
次に、組み込みLDAP機能を使用してLDAPユーザーをインポートするカスタムモジュールで使用できる関数を示します。
function importUsers($ldap_query_id='all_employees') {
$ldapQuery = ldap_query_get_queries($ldap_query_id, 'all', TRUE, TRUE);
$ldap_users = $ldapQuery->query();
foreach ($ldap_users as $ldap_user) {
$username = $ldap_user['samaccountname'][0];
if (!empty($username)) {
$ldap_user_conf = ldap_user_conf();
$user_edit = array('name' => $username);
$save = true;
$ldap_user_conf->provisionDrupalAccount(NULL, $user_edit, NULL, $save);
}
}
}
LDAPのユーザーがすでにいる場合は警告またはエラーが発生する可能性がありますが、問題はありません。
LDAPフィードを探しているようです https://www.drupal.org/node/1300812 これは、これまで細かく行ってきました。 LDAPユーザーモジュールは認証のみを処理し、ユーザーがログインしたときにのみトリガーします。しかし、スタッフリストについては、CMSを使用することのない他の90%のスタッフも更新する必要がありました。 LDAPフィードはそれを行い、LDAPからの追加のデータフィールドをDrupal 7ユーザーアカウントに同期することもできます。
毎晩実行しています。結果の例は次のとおりです(下の表) https://www.niwa.co.nz/atmosphere/key-contacts
残っている最大の問題は、ユーザーがLDAPから姿を消した後、スタッフリストからユーザーを削除することでした-これはまだトリッキーです。