|
|
|
@ -1,25 +1,42 @@
|
|
|
|
|
<?php |
|
|
|
|
|
|
|
|
|
use yii\base\InvalidConfigException; |
|
|
|
|
use yii\db\Schema; |
|
|
|
|
use yii\rbac\DbManager; |
|
|
|
|
|
|
|
|
|
class m140506_102106_rbac_init extends \yii\db\Migration |
|
|
|
|
{ |
|
|
|
|
/** |
|
|
|
|
* @throws yii\base\InvalidConfigException |
|
|
|
|
* @return DbManager |
|
|
|
|
*/ |
|
|
|
|
protected function getAuthManager() |
|
|
|
|
{ |
|
|
|
|
$authManager = Yii::$app->getAuthManager(); |
|
|
|
|
if (!$authManager instanceof DbManager) { |
|
|
|
|
throw new InvalidConfigException('You should configure "authManager" component to use database before executing this migration.'); |
|
|
|
|
} |
|
|
|
|
return $authManager; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function up() |
|
|
|
|
{ |
|
|
|
|
$authManager = $this->getAuthManager(); |
|
|
|
|
|
|
|
|
|
$tableOptions = null; |
|
|
|
|
if ($this->db->driverName === 'mysql') { |
|
|
|
|
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$this->createTable('{{%auth_rule}}', [ |
|
|
|
|
$this->createTable($authManager->ruleTable, [ |
|
|
|
|
'name' => Schema::TYPE_STRING . '(64) NOT NULL', |
|
|
|
|
'data' => Schema::TYPE_TEXT, |
|
|
|
|
'created_at' => Schema::TYPE_INTEGER, |
|
|
|
|
'updated_at' => Schema::TYPE_INTEGER, |
|
|
|
|
], $tableOptions); |
|
|
|
|
$this->addPrimaryKey('pk-auth_rule', '{{%auth_rule}}', 'name'); |
|
|
|
|
$this->addPrimaryKey('pk-auth_rule', $authManager->ruleTable, 'name'); |
|
|
|
|
|
|
|
|
|
$this->createTable('{{%auth_item}}', [ |
|
|
|
|
$this->createTable($authManager->itemTable, [ |
|
|
|
|
'name' => Schema::TYPE_STRING . '(64) NOT NULL', |
|
|
|
|
'type' => Schema::TYPE_INTEGER . ' NOT NULL', |
|
|
|
|
'description' => Schema::TYPE_TEXT, |
|
|
|
@ -28,32 +45,34 @@ class m140506_102106_rbac_init extends \yii\db\Migration
|
|
|
|
|
'created_at' => Schema::TYPE_INTEGER, |
|
|
|
|
'updated_at' => Schema::TYPE_INTEGER, |
|
|
|
|
], $tableOptions); |
|
|
|
|
$this->addPrimaryKey('pk-auth_item', '{{%auth_item}}', 'name'); |
|
|
|
|
$this->addForeignKey('fk-auth_item-rule_name', '{{%auth_item}}', 'rule_name', '{{%auth_rule}}', 'name', 'SET NULL', 'CASCADE'); |
|
|
|
|
$this->createIndex('idx-auth_item-type', '{{%auth_item}}', 'type'); |
|
|
|
|
$this->addPrimaryKey('pk-auth_item', $authManager->itemTable, 'name'); |
|
|
|
|
$this->addForeignKey('fk-auth_item-rule_name', $authManager->itemTable, 'rule_name', $authManager->ruleTable, 'name', 'SET NULL', 'CASCADE'); |
|
|
|
|
$this->createIndex('idx-auth_item-type', $authManager->itemTable, 'type'); |
|
|
|
|
|
|
|
|
|
$this->createTable('{{%auth_item_child}}', [ |
|
|
|
|
$this->createTable($authManager->itemChildTable, [ |
|
|
|
|
'parent' => Schema::TYPE_STRING . '(64) NOT NULL', |
|
|
|
|
'child' => Schema::TYPE_STRING . '(64) NOT NULL', |
|
|
|
|
], $tableOptions); |
|
|
|
|
$this->addPrimaryKey('pk-auth_item_child', '{{%auth_item_child}}', ['parent', 'child']); |
|
|
|
|
$this->addForeignKey('fk-auth_item_child-parent', '{{%auth_item_child}}', 'parent', '{{%auth_item}}', 'name', 'CASCADE', 'CASCADE'); |
|
|
|
|
$this->addForeignKey('fk-auth_item_child-child', '{{%auth_item_child}}', 'child', '{{%auth_item}}', 'name', 'CASCADE', 'CASCADE'); |
|
|
|
|
$this->addPrimaryKey('pk-auth_item_child', $authManager->itemChildTable, ['parent', 'child']); |
|
|
|
|
$this->addForeignKey('fk-auth_item_child-parent', $authManager->itemChildTable, 'parent', $authManager->itemTable, 'name', 'CASCADE', 'CASCADE'); |
|
|
|
|
$this->addForeignKey('fk-auth_item_child-child', $authManager->itemChildTable, 'child', $authManager->itemTable, 'name', 'CASCADE', 'CASCADE'); |
|
|
|
|
|
|
|
|
|
$this->createTable('{{%auth_assignment}}', [ |
|
|
|
|
$this->createTable($authManager->assignmentTable, [ |
|
|
|
|
'item_name' => Schema::TYPE_STRING . '(64) NOT NULL', |
|
|
|
|
'user_id' => Schema::TYPE_STRING . '(64) NOT NULL', |
|
|
|
|
'created_at' => Schema::TYPE_INTEGER, |
|
|
|
|
], $tableOptions); |
|
|
|
|
$this->addPrimaryKey('pk-auth_assignment', '{{%auth_assignment}}', ['item_name', 'user_id']); |
|
|
|
|
$this->addForeignKey('fk-auth_assignment-item_name', '{{%auth_assignment}}', 'item_name', '{{%auth_item}}', 'name', 'CASCADE', 'CASCADE'); |
|
|
|
|
$this->addPrimaryKey('pk-auth_assignment', $authManager->assignmentTable, ['item_name', 'user_id']); |
|
|
|
|
$this->addForeignKey('fk-auth_assignment-item_name', $authManager->assignmentTable, 'item_name', $authManager->itemTable, 'name', 'CASCADE', 'CASCADE'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function down() |
|
|
|
|
{ |
|
|
|
|
$this->dropTable('{{%auth_assignment}}'); |
|
|
|
|
$this->dropTable('{{%auth_item_child}}'); |
|
|
|
|
$this->dropTable('{{%auth_item}}'); |
|
|
|
|
$this->dropTable('{{%auth_rule}}'); |
|
|
|
|
$authManager = $this->getAuthManager(); |
|
|
|
|
|
|
|
|
|
$this->dropTable($authManager->assignmentTable); |
|
|
|
|
$this->dropTable($authManager->itemChildTable); |
|
|
|
|
$this->dropTable($authManager->itemTable); |
|
|
|
|
$this->dropTable($authManager->ruleTable); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|