PHPの文法(あるいはC++言語でも良いですよ)が読めるようでしたら,原因究明が比較的簡単にできます.これはPHPでほぼ全てが書かれているオープンソースMoodleの利点の一つです.
今回は特にエラーメッセージが表示されているので追跡は楽な方ですね.
Moodleでは多言語対応のために言語パックを用いています.get_string(), print_string()などの関数を用いてキーワードから各国言語のメッセージに変換します.もしエラーメッセージが日本語ならば,moodledata/lang/ja_utf8のフォルダ以下をそのエラーメッセージでgrepして見て下さい.どのキーワードを用いているのかが分かるでしょう.キーワードが判明したら,moodleフォルダ以下をgrepしてそのエラーメッセージを出力している箇所を探せばOKです.
今回のエラーメッセージはどうやら言語パックに対応されていないメッセージ出力のようです.そこで,moodleフォルダ以下を"Can not edit own profile"でgrepしてみましたら,moodle/user/edit.phpの66行目であることが分かります(私の環境と居間中さんの環境では多少,行番号は異なるかも知れません).
// check access control
if ($user->id == $USER->id) {
//editing own profile - require_login() MUST NOT be used here, it would result in infinite loop!
if (!has_capability('moodle/user:editownprofile', $systemcontext)) {
error('Can not edit own profile, sorry.');
}
} else {
この条件を満たせない時に出力されるエラーです.has_capability()はログインしているユーザのもつ権限をチェックする関数です.editownprofileはユーザーのパーミッションの一つだと思います.
サイト管理ブロックの「ユーザ」-「パーミッション」-「ロールの定義」で,たとえばguestの「編集」でパーミッションの一覧を表示してみて下さい(確認が目的であって,実際には編集を行わない方が良いでしょう).この長いリストの中のシステムの項にeditownprofileは存在します.Webブラウザの検索機能で探しても良いでしょう.guestですと,この設定は禁止に設定されていますので,もしLDAPでログインしたユーザのデフォルトのロールがゲストであったらプロファイルの編集はできません.一方,studentの場合は...当方の環境では”設定なし”になっています.でも,”認証済みユーザー”では”許可”になっています.
あと,同じくサイト管理ブロックの「ユーザ」-「パーミッション」-「ユーザポリシー」を見てみましょう.気になるのは「すべてのユーザのデフォルトロール」です.当方の環境では”認証済みユーザ”です.グローバルロールの割り当てが特に行われていない場合,フロントページにログインした状態で,全てのユーザは”認証済みユーザ”の権限を持ち,この状態のユーザはプロファイルの編集を自分で行うことができるという状態にあります.もし”すべてのユーザのデフォルトロール”がguestやstudentの場合は,もしかしたらエラーが発生するかも知れませんね.なんらかの事情があってそのように設定したのか,あるいはMoodleのバージョンアップを行う過程でデフォルト設定が正しく行われなかった可能性もあります.もし”認証済みユーザ”ではない場合,その理由を少しだけ考える(思い出す)必要があるでしょう.
私はLDAP認証を用いたことは無いのですが,LDAP認証を行った際にマッピングされたデータの一部をユーザプロファイルにバックグラウンドでコピーする処理があるのではないでしょうか.その際にLDAP認証されたユーザのデフォルトのロールがguestなどの権限がstudentよりも低い権限の場合に,修正を自動的に行うことができずにエラーを発しているのではないかというのが私の予想です.
何か心当たりは無いでしょうか?