J'ai développé un service REST sur les clients Yii2 et Angular 2. Utilisation de l'authentification Bearer JWT. Par exemple il y a un uri: http://127.0.0.1/v1/accounts/123456/meters, qui devrait renvoyer tous les compteurs de l'utilisateur par compte, dont il est propriétaire.Comment vérifier si l'utilisateur authentifié est gestionnaire de la ressource REST
règle de routeur appliquée:
'<accountId:\w+>/<action:[\w-]+>' => '<action>',
Contrôleurs a des comportements suivants:
'authenticator' => [
'class' => HttpBearerAuth::className(),
'except' => ['options']
],
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'actions' => ['meters'],
'roles' => ['@'],
]
]
]
action AccountController :: actionMeters regarde:
public function actionMeters($accountId)
{
// Call MS SQL procedure
$meters = Yii::$app->db->createCommand("EXEC [getMetersByAccountId] :accountId")->bindValue(':accountId', $accountId)->queryAll()
return $meters;
}
Mais de cette manière l'utilisateur authentifié peut obtenir (si modifier le paramètre GET accountId), qui appartient à un autre utilisateur.
J'ai une table user_account dans la base de données, qui relie les utilisateurs et les comptes, mais je ne sais pas dans quel lieu d'application dois-je effectuer une vérification correctement. Comment faire une vérification si un utilisateur authentifié a un accès à cette ressource par le paramètre accountId spécifié? Merci.