Yii授權

驗證的用戶具有足夠的權限做一些事情的過程稱爲授權。Yii 提供了ACF(訪問控制過濾器),一個授權方法它實現了 yii\filters\AccessControl。

修改 SiteController 中的 behaviors() 函數,如下實現代碼 -

public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['about', 'contact'],
'rules' => [
[
'allow' => true,
'actions' => ['about'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['contact', 'about'],
'roles' => ['@'],
],
],
],
];
}

在上面的代碼中,ACF被連接作爲一個行爲。只有屬性指定ACF應該只適用於 about 和 contact 的動作。其他動作不會受到訪問控制。rules 屬性列出訪問的規則。所有遊客用戶(使用 「?」 角色)將被允許訪問 about 動作(方法)。

所有身份驗證的用戶(使用 「@」 角色)將被允許訪問 contact 和 about 動作。

如果打開URL: http://localhost:8080/index.php?r=site/about ,會看到關於頁面;

如果打開URL:  http://localhost:8080/index.php?r=site/contact ,

將會被重定向到登錄頁面,因爲只有合法的用戶才能訪問 contact 方法(動作)。

訪問規則支持以下選項 - 

  • allow − 定義是否是一個"allow" 或 "deny"規則

  • actions − 定義此規則匹配哪些動作

  • controllers − 定義此規則匹配哪些控制器

  • roles − 定義用戶角色匹配此規則。兩個特殊角色被識別 -

    • ? − guest用戶相匹配

    • @ − 通過認證的用戶相匹配

  • ips − 定義此規則匹配 IP 地址

  • verbs − 定義請求方法(POST,GET,PUT等)的規則匹配

  • matchCallback − 定義一個PHP回調函數調用以檢查是否應適用於這一規則

  • denyCallback − 定義一個PHP回調函數,此規則拒絕訪問時調用

密碼

第1步 - Yii 使用密碼時提供以下處理方法,如下代碼所示:

public function actionAuth() {

$password = "123456";

//generates password hasg
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);
var_dump($hash);echo '
';

//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);echo '
';

//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);echo '
';

//hash data with a secret key
$data = Yii::$app->getSecurity()->hashData("mygenuinedata", $key);
var_dump($data); echo '
';

//validate data with a secret key
$data = Yii::$app->getSecurity()->validateData($data, $key);
var_dump($data);
}

第2步 - 輸入URL  http://localhost:8080/index.php?r=site/auth , 會看到下面結果:
Yii授權