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动作上。所有其他的动作不受访问控制。规则属性列出了访问规则。所有的访客(拥有“?”角色)都可以访问about动作。所有认证用户(拥有“@”角色)都可以访问contact和about动作。 如果你打开 http://localhost:8080/index.php?r=site/about 链接,你会看到该页面。但如果你打开 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";
//generates password hasghash = 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 keyencryptedData = Yii::app->getSecurity()->encryptByPassword("mydata",key);
var_dump(encryptedData);
//decrypt data with a secret keydata = 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 ,你将看到以下内容。