php – 只允许作者使用ACF在yii2中编辑他的帖子

前端之家收集整理的这篇文章主要介绍了php – 只允许作者使用ACF在yii2中编辑他的帖子前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用访问控制过滤器进行访问管理,但无法完成一件事 – 例如,我如何才能让项目经理更新项目并禁止其他人?我通过matchCallback尝试了它,但在这种情况下,所有项目经理都可以更新任何项目,因为返回了TRUE.

类似的更常用的规则 – 如何允许用户使用ACF更新/删除他是作者的帖子?

  1. 'access' => [
  2. 'class' => AccessControl::className(),'only' => ['index','view','create','update','delete'],'rules' => [
  3. [
  4. 'actions' => ['update'],'allow' => true,'roles' => ['@'],'matchCallback' => function ($rule,$action) {
  5.  
  6. return Yii::$app->user->identity->getProjectParticipants()
  7. ->one()->isManager(Yii::$app->user->identity->id);
  8. }
  9. ],],
它可以实现如下:
  1. use Yii;
  2. use yii\web\Controller;
  3. use yii\filters\AccessControl;
  4.  
  5. class MyController extends Controller
  6. {
  7.  
  8. ...
  9.  
  10. public function behaviors()
  11. {
  12. return [
  13. 'access' => [
  14. 'class' => AccessControl::className(),'only' => ['update','rules' => [
  15. [
  16. 'actions' => ['update',$action) {
  17. if (Yii::$app->user->can('admin') || $this->isUserAuthor()) {
  18. return true;
  19. }
  20. return false;
  21. }
  22. ],];
  23. }
  24.  
  25. protected function findModel($id)
  26. {
  27. if (($model = MyModel::findOne($id)) !== null) {
  28. return $model;
  29. } else {
  30. throw new NotFoundHttpException('The requested page does not exist.');
  31. }
  32. }
  33.  
  34. protected function isUserAuthor()
  35. {
  36. return $this->findModel(Yii::$app->request->get('id'))->author->id == Yii::$app->user->id;
  37. }
  38.  
  39. ...
  40.  
  41. }

猜你在找的PHP相关文章