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 被附加为一个行为。only 属性指定 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 −定义这是"允许"还是"拒绝"规则。
actions − 定义此规则匹配的操作。
controllers − 定义此规则匹配的控制器。
roles − 定义此规则匹配的用户角色。可识别两种特殊角色 −
? − 匹配访客用户。
@ − 匹配经过身份验证的用户。
ips − 定义此规则匹配的 IP 地址。
verbs −定义此规则匹配的请求方法(POST、GET、PUT 等)。
matchCallback − 定义一个 PHP 可调用函数,应调用该函数来检查是否应应用此规则。
denyCallback − 定义一个 PHP 可调用函数,应在该规则拒绝访问时调用该函数。
密码
步骤 1 − Yii 提供了以下用于处理密码的便捷方法。
public function actionAuth() {
$password = "asd%#G3";
//生成密码哈希
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);
var_dump($hash);
//验证密码哈希
if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
echo "正确密码";
} else {
echo "密码错误";
}
//生成令牌
$key = Yii::$app->getSecurity()->generateRandomString();
var_dump($key);
//使用密钥加密数据
$encryptedData = Yii::$app->getSecurity()->encryptByPassword("mydata", $key);
var_dump($encryptedData);
//使用密钥解密数据
$data = Yii::$app->getSecurity()->decryptByPassword($encryptedData, $key);
var_dump($data);
//使用密钥哈希数据
$data = Yii::$app->getSecurity()->hashData("mygenuinedata", $key);
var_dump($data);
//使用密钥验证数据
$data = Yii::$app->getSecurity()->validateData($data, $key);
var_dump($data);
}
步骤 2 − 输入 URL http://localhost:8080/index.php?r=site/auth,您将看到以下内容。

