usuarios users tutorial sesion inicio custom control con basado acceso php yii callback yii2 access-control

php - users - yii2 rbac tutorial



Lectura de parámetros de acción en matchCallback de ACF (1)

La clase de controlador tiene el método bindActionParams() invocado por / yii / base / Action cuando comienza a ejecutarse con los parámetros especificados . Entonces al primer controlador invocar un método de acción y ejecutarlo con params y luego la acción enlazará sus params al controlador. Pero la comprobación de AccessControl se está ejecutando mucho antes de que se ejecute la acción, es por eso que los actionParams están vacíos. Aquí hay un ciclo de vida de la solicitud . Como puede ver antes de que se ejecute la acción, el controlador realiza filtros, uno de los cuales es AccessControl .

Si no te gusta la forma "brutal", considera el uso de Yii::$app->request->get() que también probará el parámetro para isset .

Tengo una declaración de ACF típica / clásica, en mi aplicación básica de aplicación, que usa matchCallback :

public function behaviors() { return [ ''access'' => [ ''class'' => AccessControl::className(), ''rules'' => [ [ ''allow'' => true, ''roles'' => [''@''], ''matchCallback'' => function ($rule, $action) { echo ''Yii::$app->controller->actionParams = ''.print_r(Yii::$app->controller->actionParams, TRUE); echo ''$action->controller->actionParams = ''.print_r($action->controller->actionParams, TRUE); echo ''$action = ''.print_r($action, TRUE); die(); } ], ], ] ]; }

Para mi sorpresa, encontré esto:

¿Cómo puede ser esto cierto? ¿Por qué los parámetros de acción no están disponibles al evaluar matchCallback ?

Y, por supuesto, cómo leerlos, si mi regla de acceso requiere verificar uno de los parámetros de acción para juzgar, si el usuario puede acceder a una acción en particular o no.

EDITAR : Puedes, por supuesto, leer los parámetros de acción usando la forma brutal de:

echo ''$_GET = ''.print_r($_GET, TRUE);

Pero, no me gustan las soluciones brutales y realmente me molesta, ¿ actionParams qué los actionParams están vacíos en esta etapa?