# :-: 设计 rbac 表结构
## 需要四张表
```
1. 角色表 Roles
2. 权限表 Permissions
3. 用户关联角色 User_has_roles
4. 角色关联权限 Role_has_permissions
```
## migration 创建
具体表结构说明看的很清楚
```php
<?php
use think\migration\Migrator;
use think\migration\db\Column;
use Phinx\Db\Adapter\MysqlAdapter;
class Rbac extends Migrator
{
public function change()
{
$this->up();
}
public function up()
{
$table = $this->table(config('permissions.table.role'), [ 'engine'=>'InnoDB']);
$table->addColumn('name', 'string',['limit' => 50, 'default'=>'','comment'=>'角色名称'])
->addColumn('created_at', 'timestamp', [ 'comment' => '创建时间'])
->addColumn('updated_at', 'timestamp', [ 'comment' => '更新时间'])
->addIndex(['name'], ['unique' => true])
->create();
$table = $this->table(config('permissions.table.permission'), ['engine' => 'InnoDB']);
$table->addColumn('name', 'string',['limit' => 50, 'default'=>'','comment'=>'菜单名称'])
->addColumn('icon', 'string', ['limit' => 50, 'default'=>'', 'comment'=>'菜单图标'])
->addColumn('pid', 'integer', ['limit' => MysqlAdapter::INT_SMALL, 'comment'=>'父级菜单ID'])
->addColumn('module', 'string',['limit' => 50, 'default'=>'','comment'=>'模块名称'])
->addColumn('controller', 'string',['limit' => 50, 'default'=>'','comment'=>'控制器名称'])
->addColumn('action', 'string',['limit' => 50, 'default'=>'1','comment'=>'方法名称'])
->addColumn('is_show', 'integer',['limit' => MysqlAdapter::INT_TINY, 'default'=> 1,'comment'=>'1 展示 2 隐藏'])
->addColumn('created_at', 'timestamp', [ 'comment' => '创建时间'])
->addColumn('updated_at', 'timestamp', [ 'comment' => '更新时间'])
->addIndex(['name'], ['unique' => true])
->create();
$table = $this->table(config('permissions.table.user_has_roles'), ['engine' => 'InnoDB', 'identity' => true]);
$table->addColumn('uid', 'integer',['limit' => 11, 'comment'=>'用户ID'])
->addColumn('role_id', 'integer', [ 'comment' => '角色ID'])
->create();
$table = $this->table(config('permissions.table.role_has_permissions'), ['engine' => 'InnoDB', 'identity' => true]);
$table->addColumn('role_id', 'integer',['limit' => 11, 'comment'=>'角色ID'])
->addColumn('permission_id', 'integer', [ 'comment' => '权限ID'])
->create();
}
public function down()
{
}
}
```