「Can not edit own profile, sorry.」のエラー原因

「Can not edit own profile, sorry.」のエラー原因

- 居間中 太郎 の投稿
返信数: 3
いつもお世話になっております。
ただいま、LDAP認証に挑戦中なのですが、認証は成功したのですが、認証後に「Can not edit own profile, sorry.」とエラーメッセージが表示されてしまいます。
このエラーメッセージの原因がよくわかりません。

どういうときに、このエラーメッセージがでるのか教えていただけないでしょうか。
居間中 太郎 への返信

Re: 「Can not edit own profile, sorry.」のエラー原因

- Hiroyuki H の投稿

moodleの、サイト管理/ユーザ/認証/LDAPサーバ にある「データマッピング」はどのようにマッピングされていますか? おそらく、「名(FirstName)」「性(Lastname)」「メールアドレス」辺りのマッピング設定に問題があるように思います。

お使いのLDAPサーバの種類などを書いて頂いた方がよろしいかもしれません。

居間中 太郎 への返信

Re: 「Can not edit own profile, sorry.」のエラー原因

- Tatsuya Shirai の投稿

 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はユーザーのパーミッションの一つだと思います.

Tatsuya Shirai への返信

Re: 「Can not edit own profile, sorry.」のエラー原因

- Tatsuya Shirai の投稿

 サイト管理ブロックの「ユーザ」-「パーミッション」-「ロールの定義」で,たとえばguestの「編集」でパーミッションの一覧を表示してみて下さい(確認が目的であって,実際には編集を行わない方が良いでしょう).この長いリストの中のシステムの項にeditownprofileは存在します.Webブラウザの検索機能で探しても良いでしょう.guestですと,この設定は禁止に設定されていますので,もしLDAPでログインしたユーザのデフォルトのロールがゲストであったらプロファイルの編集はできません.一方,studentの場合は...当方の環境では”設定なし”になっています.でも,”認証済みユーザー”では”許可”になっています.
 あと,同じくサイト管理ブロックの「ユーザ」-「パーミッション」-「ユーザポリシー」を見てみましょう.気になるのは「すべてのユーザのデフォルトロール」です.当方の環境では”認証済みユーザ”です.グローバルロールの割り当てが特に行われていない場合,フロントページにログインした状態で,全てのユーザは”認証済みユーザ”の権限を持ち,この状態のユーザはプロファイルの編集を自分で行うことができるという状態にあります.もし”すべてのユーザのデフォルトロール”がguestやstudentの場合は,もしかしたらエラーが発生するかも知れませんね.なんらかの事情があってそのように設定したのか,あるいはMoodleのバージョンアップを行う過程でデフォルト設定が正しく行われなかった可能性もあります.もし”認証済みユーザ”ではない場合,その理由を少しだけ考える(思い出す)必要があるでしょう.

 私はLDAP認証を用いたことは無いのですが,LDAP認証を行った際にマッピングされたデータの一部をユーザプロファイルにバックグラウンドでコピーする処理があるのではないでしょうか.その際にLDAP認証されたユーザのデフォルトのロールがguestなどの権限がstudentよりも低い権限の場合に,修正を自動的に行うことができずにエラーを発しているのではないかというのが私の予想です.

 何か心当たりは無いでしょうか?