Moodle: 3.8.5+
LDAPサーバ: Active Directory (Windows Server)
という組み合わせでLDAP認証を使用しています。プラグインの設定で Active Directory 内の Teacher Group に対してMoodleのコース作成者のロールをマッピングして,教員は自由にコース作成が行える運用をしています。
今まで発生していたかったのですが,最近,コース作成者のロールが勝手に外れてしまう現象が出ています。
LDAP認証のプラグインにあるシステムロールマッピングの機能は,何かのタイミングでマッピングを解除してしまうことがあるのでしょうか?
Teacher Group のうち複数のアカウントでコース作成者のロールが外れているのですが,外れていないアカウントもあり,何が原因か分からないため,アドバイス頂けると助かります。
恐らく、バグ※1 だと思われます。
[※1 [MDL-66683] Reinstate the default role for course creators (revert logic changes from MDL-66181) - Moodle Tracker]
https://tracker.moodle.org/browse/MDL-66683
Moodleをアップデートするか、以下のChristian Bocquetさんの投稿 (Friday, 13 September 2019, 8:43 AM) を参考にしたにコード (course/edit.php) 修正により正常に動作するようになるかと思います。
[Re: Moodle in English: Course creator doesn't get Teacher role in created courses]
https://moodle.org/mod/forum/discuss.php?d=390792#p1575784
具体的なコード (course/edit.php) 修正に関しまして、ご参考までに以下のページをご覧ください。
[Merge branch 'MDL-66683-master' of git://github.com/cescobedo/moodle - moodle/moodle@3a9c515]
https://github.com/moodle/moodle/commit/3a9c51505712352d339462abc4a194812d4a6475
github のコードも見てみましたが,既に反映されているように思いました。
土曜日に,手動でコース作成者の権限を付与したのですが,月曜日には複数の教員から問い合わせが来ているので,手動で付与してもまた権限が外れてしまうようです。
ご確認頂きまして、ありがとうございます。
「コース作成者のロールが勝手に外れてしまう現象」が発生する前のMoodleのバージョンと発生するようになってからのMoodleのバージョンは同じでしょうか?
もし、Moodleのバージョンが異なります場合、両方のソースコードを確認させて頂きます。
Moodle 3.8.4+ (Build: 20200910) では,動作しなくなっています。
2020/9/4 に auth_ldap の変更がコミットされているので,この辺りがあやしいと思いテストしました。
https://github.com/moodle/moodle/commits/MOODLE_38_STABLE?after=09c7f259dcbc7cc66424354e2c4102d53cd0c7a2+34&branch=MOODLE_38_STABLE
以下のコマンドを使って2つのバージョン (3.8.4+ (Build: 20200827) および 3.8.4+ (Build: 20200910) を比較してみましたところ、「管理 > サイト管理 > プラグイン > 認証 > LDAPサーバ」の「ユーザルックアップ設定」セクションの「ユーザDNのメンバー属性 auth_ldap | memberattribute_isdn」の部分が変更されているようです。
# git rev-list -n 1 --before="2020-09-11-00 00:00" origin/MOODLE_38_STABLE
0268610d25090ff72e54fe37ee29c898f10ae4b3
# git rev-list -n 1 --before="2020-08-28-00 00:00" origin/MOODLE_38_STABLE
11b4e810fbd964de89c365611ace4b5fa0bcf125
# git diff --stat --color 0268610d25090ff72e54fe37ee29c898f10ae4b3..11b4e810fbd964de89c365611ace4b5fa0bcf125
# git diff 0268610d25090ff72e54fe37ee29c898f10ae4b3..11b4e810fbd964de89c365611ace4b5fa0bcf125 > ldap_diff.txt
以下、2つのバージョン間のLDAP関連変更部分です。
diff --git a/auth/cas/settings.php b/auth/cas/settings.php
index 50f6733f7c1..5434984b0c2 100644
--- a/auth/cas/settings.php
+++ b/auth/cas/settings.php
@@ -239,9 +239,9 @@ if ($ADMIN->fulltree) {
get_string('auth_ldap_memberattribute', 'auth_ldap'), '', PARAM_RAW));
// Member attribute uses dn.
- $settings->add(new admin_setting_configselect('auth_cas/memberattribute_isdn',
+ $settings->add(new admin_setting_configtext('auth_cas/memberattribute_isdn',
get_string('auth_ldap_memberattribute_isdn_key', 'auth_ldap'),
- get_string('auth_ldap_memberattribute_isdn', 'auth_ldap'), 0, $yesno));
+ get_string('auth_ldap_memberattribute_isdn', 'auth_ldap'), '', PARAM_RAW));
diff --git a/auth/ldap/db/upgrade.php b/auth/ldap/db/upgrade.php
index cd538cae32d..d99fdccc464 100644
--- a/auth/ldap/db/upgrade.php
+++ b/auth/ldap/db/upgrade.php
@@ -75,13 +75,5 @@ function xmldb_auth_ldap_upgrade($oldversion) {
// Automatically generated Moodle v3.8.0 release upgrade line.
// Put any upgrade step following this.
- if ($oldversion < 2019111801) {
- // Normalize the memberattribute_isdn plugin config.
- set_config('memberattribute_isdn',
- !empty(get_config('auth_ldap', 'memberattribute_isdn')), 'auth_ldap');
-
- upgrade_plugin_savepoint(true, 2019111801, 'auth', 'ldap');
- }
-
return true;
}
diff --git a/auth/ldap/lang/en/auth_ldap.php b/auth/ldap/lang/en/auth_ldap.php
index 5ed9e14da93..da0f7e9546c 100644
--- a/auth/ldap/lang/en/auth_ldap.php
+++ b/auth/ldap/lang/en/auth_ldap.php
@@ -57,7 +57,7 @@ $string['auth_ldap_ldap_encoding'] = 'Encoding used by the LDAP server, most lik
$string['auth_ldap_ldap_encoding_key'] = 'LDAP encoding';
$string['auth_ldap_login_settings'] = 'Login settings';
$string['auth_ldap_memberattribute'] = 'Optional: Overrides user member attribute, when users belongs to a group. Usually \'member\'';
-$string['auth_ldap_memberattribute_isdn'] = 'Overrides handling of member attribute values';
+$string['auth_ldap_memberattribute_isdn'] = 'Optional: Overrides handling of member attribute values, either 0 or 1';
$string['auth_ldap_memberattribute_isdn_key'] = 'Member attribute uses dn';
$string['auth_ldap_memberattribute_key'] = 'Member attribute';
$string['auth_ldap_noconnect'] = 'LDAP-module cannot connect to server: {$a}';
diff --git a/auth/ldap/settings.php b/auth/ldap/settings.php
index d72aed77ac1..f9bc8d9b8f3 100644
--- a/auth/ldap/settings.php
+++ b/auth/ldap/settings.php
@@ -142,9 +142,9 @@ if ($ADMIN->fulltree) {
get_string('auth_ldap_memberattribute', 'auth_ldap'), '', PARAM_RAW));
// Member attribute uses dn.
- $settings->add(new admin_setting_configselect('auth_ldap/memberattribute_isdn',
+ $settings->add(new admin_setting_configtext('auth_ldap/memberattribute_isdn',
get_string('auth_ldap_memberattribute_isdn_key', 'auth_ldap'),
- get_string('auth_ldap_memberattribute_isdn', 'auth_ldap'), 0, $yesno));
+ get_string('auth_ldap_memberattribute_isdn', 'auth_ldap'), '', PARAM_RAW));
// Object class.
$settings->add(new admin_setting_configtext('auth_ldap/objectclass',
diff --git a/auth/ldap/version.php b/auth/ldap/version.php
index f8987685809..d16b0ae9369 100644
--- a/auth/ldap/version.php
+++ b/auth/ldap/version.php
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2019111801; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->version = 2019111800; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2019111200; // Requires this Moodle version
$plugin->component = 'auth_ldap'; // Full name of the plugin (used for diagnostics)
is_role 関数が正しく動作しなくなっていたようです。以下のパッチで動作するようになりました。
--- auth.php.orig 2020-09-22 10:57:42.000000000 +0900 +++ auth.php 2020-09-22 10:58:11.000000000 +0900 @@ -1094,7 +1094,7 @@ $ldapconnection = $this->ldap_connect(); - if ($this->config->memberattribute_isdn) { + if ($this->config->memberattribute_isdn == 0) { if (!($userid = $this->ldap_find_userdn($ldapconnection, $extusername))) { return false; }