驗證的用戶具有足夠的許可權做一些事情的過程稱為授權。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 ,會看到關於頁面;
將會被重定向到登錄頁面,因為只有合法的用戶才能訪問 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 '<br/>'; //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 '<br/>'; //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 '<br/>'; //hash data with a secret key $data = Yii::$app->getSecurity()->hashData("mygenuinedata", $key); var_dump($data); echo '<br/>'; //validate data with a secret key $data = Yii::$app->getSecurity()->validateData($data, $key); var_dump($data); }
上一篇:
Yii身份驗證
下一篇:
Yii本地化(國際化)