Yii - Autorización
El proceso de verificar que un usuario tiene suficiente permiso para hacer algo se llama authorization. Yii proporciona un ACF (filtro de control de acceso), un método de autorización implementado comoyii\filters\AccessControl. Modificar la función behavior () del SiteController -
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['about', 'contact'],
'rules' => [
[
'allow' => true,
'actions' => ['about'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['contact', 'about'],
'roles' => ['@'],
],
],
],
];
}
En el código anterior, ACF se adjunta como comportamiento. La única propiedad especifica que el ACF debe aplicarse solo a las acciones de contacto y acerca de. Todas las demás acciones no están sujetas al control de acceso. La propiedad de reglas enumera las reglas de acceso. Todos los invitados (con el rol "?") Podrán acceder alaboutacción. Todos los usuarios autenticados (con el rol “@”) podrán acceder al contacto y sobre las acciones.
Si vas a la URL http://localhost:8080/index.php?r=site/about, verá la página, pero si abre la URL http://localhost:8080/index.php?r=site/contact, será redirigido a la página de inicio de sesión porque solo los usuarios autenticados pueden acceder al contact acción.
Las reglas de acceso admiten muchas opciones:
allow - Define si se trata de una regla de "permitir" o "denegar".
actions - Define con qué acciones coincide esta regla.
controllers - Define con qué controladores coincide esta regla.
roles- Define los roles de usuario que coincide con esta regla. Se reconocen dos roles especiales:
? - coincide con un usuario invitado.
@ - coincide con un usuario autenticado.
ips - Define las direcciones IP que coincide con esta regla.
verbs - Define con qué método de solicitud (POST, GET, PUT, etc.) coincide esta regla.
matchCallback - Define una función invocable de PHP que se debe llamar para verificar si se debe aplicar esta regla.
denyCallback - Define una función invocable de PHP que debe llamarse cuando esta regla niegue el acceso.
Contraseñas
Step 1 - Yii proporciona los siguientes métodos prácticos para trabajar con contraseñas.
public function actionAuth() {
$password = "asd%#G3";
//generates password hasg
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);
var_dump($hash);
//validates password hash
if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
echo "correct password";
} else {
echo "incorrect password";
}
//generate a token
$key = Yii::$app->getSecurity()->generateRandomString();
var_dump($key);
//encrypt data with a secret key
$encryptedData = Yii::$app->getSecurity()->encryptByPassword("mydata", $key);
var_dump($encryptedData);
//decrypt data with a secret key
$data = Yii::$app->getSecurity()->decryptByPassword($encryptedData, $key);
var_dump($data);
//hash data with a secret key
$data = Yii::$app->getSecurity()->hashData("mygenuinedata", $key);
var_dump($data);
//validate data with a secret key
$data = Yii::$app->getSecurity()->validateData($data, $key);
var_dump($data);
}
Step 2 - Ingrese la URL http://localhost:8080/index.php?r=site/auth, verá lo siguiente.