yii2_rbac实例
时间: 2023-11-30 17:05:03 浏览: 60
yii2是一个流行的PHP框架,它提供了一个强大的rbac权限控制系统。下面是一个yii2_rbac的实例:
1.首先,我们需要在Yii2中安装yii2-admin扩展。可以通过以下命令进行安装:
```shell
composer require mdmsoft/yii2-admin "~2.0"
```
2.安装完成后,我们需要在配置文件中添加以下内容:
```php
'modules' => [
'admin' => [
'class' => 'mdm\admin\Module',
],
],
```
3.然后,我们需要在数据库中创建以下表:
```sql
CREATE TABLE `auth_rule` (
`name` varchar(64) NOT NULL,
`data` text,
`created_at` int(11) DEFAULT NULL,
`updated_at` int(11) DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `auth_item` (
`name` varchar(64) NOT NULL,
`type` int(11) NOT NULL,
`description` text,
`rule_name` varchar(64) DEFAULT NULL,
`data` text,
`created_at` int(11) DEFAULT NULL,
`updated_at` int(11) DEFAULT NULL, PRIMARY KEY (`name`),
KEY `rule_name` (`rule_name`),
CONSTRAINT `auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `auth_item_child` (
`parent` varchar(64) NOT NULL,
`child` varchar(64) NOT NULL,
PRIMARY KEY (`parent`,`child`),
CONSTRAINT `auth_item_child_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `auth_item_child_ibfk_2` FOREIGN KEY (`child`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `auth_assignment` (
`item_name` varchar(64) NOT NULL,
`user_id` varchar(64) NOT NULL,
`created_at` int(11) DEFAULT NULL,
PRIMARY KEY (`item_name`,`user_id`),
CONSTRAINT `auth_assignment_ibfk_1` FOREIGN KEY (`item_name`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
4.接下来,我们需要在配置文件中添加以下内容:
```php
'components' => [
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
],
```
5.然后,我们需要在控制器中添加以下代码:
```php
use yii\filters\AccessControl;
use yii\filters\VerbFilter;
use mdm\admin\components\AccessControl as AdminAccessControl;
public function behaviors()
{
return [
'access' => [
'class' => AdminAccessControl::className(),
'allowActions' => [
'site/login',
'site/logout',
'site/error',
]
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
];
}
```
6.最后,我们需要在视图文件中添加以下代码:
```php
use mdm\admin\components\Helper;
<?= Helper::checkRoute('site/index') ? Html::a('Dashboard', ['/site/index']) : '' ?>
<?= Helper::checkRoute('site/about') ? Html::a('About', ['/site/about']) : '' ?>
<?= Helper::checkRoute('site/contact') ? Html::a('Contact', ['/site/contact']) : '' ?>
<?= Helper::checkRoute('site/signup') ? Html::a('Signup', ['/site/signup']) : '' ?>
<?= Helper::checkRoute('site/login') ? Html::a('Login', ['/site/login']) : '' ?>
<?= Helper::checkRoute('site/logout') ? Html::a('Logout', ['/site/logout'], ['data-method' => 'post']) : '' ?>
```