PHP开发教程

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 '<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 , 会看到下面结果:

11.png

Powered by PHP二次开发 ©2008-2017