Yii - 授权

  • 简述

    验证用户是否有足够的权限来做某事的过程称为授权Yii 提供了一个 ACF(访问控制过滤器),一种实现为yii\filters\AccessControl的授权方法。修改 SiteController 的 behavior() 函数 -
    
    public function behaviors() {
       return [
          'access' => [
             'class' => AccessControl::className(),
             'only' => ['about', 'contact'],
             'rules' => [
                [
                   'allow' => true,
                   'actions' => ['about'],
                   'roles' => ['?'],
                ],
                [
                   'allow' => true,
                   'actions' => ['contact', 'about'],
                   'roles' => ['@'],
                ],
             ],
          ],
       ];
    }
    
    在上面的代码中,ACF 是作为一种行为附加的。only 属性指定 ACF 应仅应用于 about 和 contact 操作。所有其他操作不受访问控制。rules 属性列出访问规则。所有来宾(具有“?”角色)都将被允许访问about操作。所有经过身份验证的用户(具有“@”角色)将被允许访问联系人和关于操作。
    如果你去 URL http://localhost:8080/index.php?r=site/about,你会看到页面,但是如果你打开 URL http://localhost:8080/index.php?r= site/contact,您将被重定向到登录页面,因为只有经过身份验证的用户才能访问联系操作。
    访问规则支持许多选项 -
    • allow - 定义这是“允许”还是“拒绝”规则。
    • actions - 定义此规则匹配的操作。
    • controllers - 定义此规则匹配的控制器。
    • roles- 定义此规则匹配的用户角色。两个特殊角色被认可 -
      • ? − 匹配来宾用户。
      • @ - 匹配经过身份验证的用户。
    • ips - 定义此规则匹配的 IP 地址。
    • verbs - 定义此规则匹配的请求方法(POST、GET、PUT 等)。
    • matchCallback - 定义应调用的 PHP 可调用函数以检查是否应应用此规则。
    • denyCallback - 定义当此规则拒绝访问时应调用的 PHP 可调用函数。
  • 密码

    Step 1 - Yii 提供了以下使用密码的便捷方法。
    
    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);
    }
    
    第 2 步- 输入 URL http://localhost:8080/index.php?r=site/auth,您将看到以下内容。
    密码