Product.supplierID = Supplier.supplierID
--------- ----------
|Product|---------|Supplier|
--------- ----------
|
| Supplier.supplierID = User.supplierID
|
---------
| User |
---------
Utilizzando la struttura della tabella di cui sopra, l'applicazione utilizza sottoclassi di ActiveController
, con override prepareDataProvider
per limitare l'elenco di ciascuna Product
un registra nel User
index
può vedere a quelli con corrispondenti supplierID
valori. Qualcosa di simile nel metodo actions()
di ProductController
.Yii2 - Override CheckAccess nel resto ActiveController
$actions['index']['prepareDataProvider'] = function($action)
{
$query = Product::find();
if (Yii::$app->user->can('supplier') &&
Yii::$app->user->identity->supplierID) {
$query->andWhere(['supplierID' => Yii::$app->user->identity->supplierID]);
}
return new ActiveDataProvider(['query' => $query]);
};
Questo funziona bene, ma sto cercando di usare checkAccess()
per limitare actionView()
per un singolo Product
.
Al momento, un loggato User
può accedere a una Product
cambiando il productID
nell'URL, se l'hanno l'appropriato supplierID
.
sembra che io non posso accedere al caso particolare di Product
, per verificare la supplierID
, fino a quando è tornato actionView()
che è quando voglio che il controllo avvenga.
Posso ignorare checkAccess()
per limitare l'accesso e lanciare l'appropriato ForbiddenHttpException
?
così , si desidera disabilitare l'accesso 'ID prodotto' dall'URL. –
hmm, forse? non ci avevo pensato da quella direzione. pensavo di non restituire dati non consentiti ma potrebbe esserci una soluzione nel non avere il 'productID' come parametro' GET'. qualcosa su cui riflettere sicuramente ... –