2016-11-07 4 views
0

ユーザーがサーバーにログインすると、コースコンテキストでユーザーの現在の役割が編集教師になります。私は学生への役割を変えたいと思う。コースの状況でユーザーの試行機能が存在するかどうかをテストしますか?

特定のコンテキストでユーザーの役割を学生に変更するには、role_assignmentテーブルの役割列をedittingteacherロールからstudentに手動で更新します。ユーザーがログアウトして再度ログインしない限り、変更は直接反映されません。

ユーザーの機能をテストするために、私は$ USERグローバル変数を使用します。 studentのUSERの役割を手動で変更しても、$ USERは更新されません。 $ USERは、ユーザーがログアウトして再度ログインした後にのみ変更を表示します。

問題はブラウザのキャッシュ、セッションに関係すると思います。 ロールを変更するとすぐに$ USERを直接更新できますか?

ユーザーの役割を変更するためのコードです。

$ index = $ context-> depth-1; $ array = explode( "/"、$ context-> path);

$ context_id = $ array [$ index];

//は、ユーザーID

$ userIdを= $ USER-> IDでログインします。

$ user- $ DB-> get_record( 'role_assignments'、array( 'contextid' => $ array [$ index]、 'userid' => $ userId));

$ user-> roleid = 5;

$ roles = get_user_roles($ context、$ userId);

$ user-> timemodified = time();

$ DB-> update_record( 'role_assignments'、$ user、$ bulk = false);

答えて

1

私はあなたが欲しいのコードは、もう少しこのようなものに見えると思う:

$coursecontext = $context->get_course_context(); 
$teacherroleid = $DB->get_field('role', 'id', ['shortname' => 'editingteacher']); 
$studentroleid = $DB->get_field('role', 'id', ['shortname' => 'student']); 
role_assign($studentroleid, $USER->id, $coursecontext->id); 
role_unassign($teacherroleid, $USER->id, $coursecontext->id); 

私はあなたがコンテキストパスを爆発によって行うことをしようとしていた何をかなり確実ではなかったので、私はあなたがしようとしていたと仮定コースのコンテキストを取得します(これは私が上で行いました)。現在のコンテキストのidだけを望むなら、$ context-> idはやったでしょう。

ロールIDをハードコードするのは良い考えではありません.5はほとんどのクリーンインストールでは学生の役割ですが、それを見ていると信頼性が向上します。

適切なMoodle関数を使用してロールを割り当て/割り当て解除することは、手動でデータベースエントリを使いこなすよりもはるかに信頼性が高くなります(必要ならば、lib/accesslib.phpを見て、 )。

+0

ありがとう@davosmith、それは魅力のように働いた。 – rahul

関連する問題