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 ,會看到關於頁面;
將會被重定向到登入頁面,因為只有合法的使用者才能存取 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);
}
第2步 - 輸入URL http://localhost:8080/index.php?r=site/auth , 會看到下面結果:
Yii授權