2016-08-29 4 views
0

私のプロジェクトにログインしたユーザーは自分のビューにアクセスしましたが、ユーザーは変更URLを持つ別のユーザーにアクセスできないようにしたいと考えています。このUserControllerにある状態 :yii2のユーザーの表示をフィルタリングする方法は?

[ 
    'allow' => true, 
    'actions' => ['update', 'view'], 
    'matchCallback' => function() { 
     return ($this->checkAccess(User::ROLE_USER)); 
    }, 
], 

public function actionView($id) 
{ 
    return $this->render('view', [ 
     'model' => $this->findModel($id), 
    ]); 
} 

user1がに行く場合:= 1ウェブ/ユーザー/ビュー@ IDを、彼はウェブ/ユーザー/ ID = 2 @ビューに行くことができます。

この問題を防ぐにはどうすればよいですか?

+0

あなたはこのコード、または任意のコードを正確にしたいですが大丈夫ですか?このプロジェクトの –

+0

では、各ユーザは自分のメッセージを見ることができます。このためには、ユーザーはmessages/view&id = 3(user1の場合はmsg3)、user2の場合はmsg5に移動する必要があります。 user1 goto messages/view&id = 5の場合、別のメッセージビューが表示されます。 –

+0

オブジェクトへのアクセスを作者に制限したいようです。この[質問](http://stackoverflow.com/questions/39218303/restricting-controller-action-to-creator-of-post-in-yii2)をチェックして、私は私の答えでそれを深くカバーしました。 – arogachev

答えて

0

URLからユーザーのIDを取得する代わりに、セッションから同じIDを取得することもできます。ような何か:

public function actionView() 
{ 
    if (!Yii::$app->user->isGuest) { // the user is logged in 
     $id = Yii::$app->user->getId(); // get the id 

     return $this->render('view', [ 
      'model' => $this->findModel($id), 
     ]); 
    } 

    throw new NotFoundHttpException('The requested page does not exist.'); 
} 

とURLは、任意のユーザーのためにweb/users/viewになります。

それとも、また、ユーザーの現在のIDで指定したIDを比較することができます:

public function actionView($id) 
{ 
    if (!Yii::$app->user->isGuest && $id == Yii::$app->user->getId()) { 
     return $this->render('view', [ 
      'model' => $this->findModel($id), 
     ]); 
    } 

    throw new NotFoundHttpException('The requested page does not exist.'); 
} 
+0

あなたのコードはuser/viewだけに当てはまります。 –

+0

このソリューションはどのコントローラでも動作します。それを実装する際に問題が発生した場合は、あなたのコントローラとビューで質問を更新してください。 – Clyff

関連する問題