验证的用户具有足够的权限做一些事情的过程称为授权。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本地化(国际化)

