我正计划实施一门语言课程,其课程可通过
lesson
操作和课程 id
访问,例如,第一节课可通过 url ../lesson.php?id=1
访问。但我希望用户在没有解决上一个练习的情况下无法访问课程。
然后,除了阻止用户从界面访问课程外,我还在控制器的访问控制部分编写了以下代码
behaviors()
方法,并且有效:
[
'actions' => ['lesson'],
'allow' => Yii::$app->user->learnLesson >= Yii::$app->request->get('id'),
],
但现在我想知道当用户成功完成一节课的练习时,更新用户的
learnLesson
属性的最安全方法是什么。
在每个课程页面中都有一个
next
按钮,用于访问下一课,只有在用户完成所有练习后才会启用。在允许访问下一课之前,javascript 还可以检查所有练习是否已完成。所以,第一页的next
按钮可以调用url.../lesson.php?id=2
,但用户还没有被允许访问该课程。
按钮显然可以调用另一个操作,更新用户的
learnLesson
属性并重定向到lesson
操作,但地址栏中的每个人都可以调用此操作。我可以将按钮放在一个表单中并通过 post
协议发送数据,但这是否安全或者也可以被绕过?或者有更好的解决方案吗?
谢谢