2016-08-29 2 views
0

in meinem Projekt protokollierte Benutzer Zugriff auf ihre Ansicht, aber ich möchte, dass der Benutzer nicht auf andere Benutzer mit Änderungs-URL zugreifen kann. in diesem Userscontroller:Wie Filteransicht für Benutzer in yii2?

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

und

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

wenn benutzer1 gehen zu: web/users/view @ id = 1, er auf dem Web/users/view @ id = 2 gehen kann.

Wie kann ich dieses Problem verhindern?

+0

Wollen Sie genau mit diesem Code oder jeder Code ist in Ordnung? –

+0

In diesem Projekt kann jeder Benutzer seine Nachrichten sehen. Dazu muss der Benutzer zu messages/view & id = 3 (msg 3 für user1) und (msg5 for user2) gehen. Wenn Benutzer1 zu Nachrichten/Ansicht & ID = 5 kommt, wird eine andere Nachrichtenansicht angezeigt. –

+0

Scheint, als ob Sie den Zugriff auf Objekte auf ihre Autoren beschränken möchten. Überprüfen Sie diese [Frage] (http://stackoverflow.com/questions/39218303/restricting-controller-action-to-creator-of-post-in-yii2), ich habe es in meiner Antwort ausführlich behandelt. – arogachev

Antwort

0

Eine Lösung könnte sein, anstatt die ID des Benutzers von URL zu bekommen, könnten Sie die gleiche ID aus der Sitzung bekommen. Etwas wie:

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.'); 
} 

und die URL wird web/users/view für jeden Benutzer sein.

Oder Sie können auch die mit dem Benutzer aktuelle ID angegebenen ID vergleichen:

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

Ihr Code ist nur für Benutzer/Ansicht wahr. Nein alle Controller. –

+0

Diese Lösungen funktionieren in jedem Controller. Wenn Sie Probleme bei der Implementierung haben, aktualisieren Sie Ihre Frage mit Ihrem Controller und View. – Clyff

Verwandte Themen