Created
July 7, 2014 10:17
-
-
Save kiaplayer/81afeb8088bfbc0c3cec to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use backend\components\DbManager; | |
use yii\base\InvalidConfigException; | |
use yii\db\Schema; | |
use yii\db\Migration; | |
class m140707_092417_create_rbac_tables extends 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($authManager->ruleTable, [ | |
'name' => Schema::TYPE_STRING . '(64) NOT NULL', | |
'data' => Schema::TYPE_TEXT, | |
'created_at' => Schema::TYPE_INTEGER, | |
'updated_at' => Schema::TYPE_INTEGER, | |
'PRIMARY KEY (name)', | |
], $tableOptions); | |
$this->createTable($authManager->itemTable, [ | |
'name' => Schema::TYPE_STRING . '(64) NOT NULL', | |
'type' => Schema::TYPE_INTEGER . ' NOT NULL', | |
'description' => Schema::TYPE_TEXT, | |
'rule_name' => Schema::TYPE_STRING . '(64)', | |
'data' => Schema::TYPE_TEXT, | |
'created_at' => Schema::TYPE_INTEGER, | |
'updated_at' => Schema::TYPE_INTEGER, | |
'PRIMARY KEY (name)', | |
'FOREIGN KEY (rule_name) REFERENCES ' . $authManager->ruleTable . ' (name) ON DELETE SET NULL ON UPDATE CASCADE', | |
], $tableOptions); | |
$this->createIndex('idx-auth_item-type', $authManager->itemTable, 'type'); | |
$this->createTable($authManager->itemChildTable, [ | |
'parent' => Schema::TYPE_STRING . '(64) NOT NULL', | |
'child' => Schema::TYPE_STRING . '(64) NOT NULL', | |
'PRIMARY KEY (parent, child)', | |
'FOREIGN KEY (parent) REFERENCES ' . $authManager->itemTable . ' (name) ON DELETE CASCADE ON UPDATE CASCADE', | |
'FOREIGN KEY (child) REFERENCES ' . $authManager->itemTable . ' (name) ON DELETE CASCADE ON UPDATE CASCADE', | |
], $tableOptions); | |
$this->createTable($authManager->assignmentTable, [ | |
'item_name' => Schema::TYPE_STRING . '(64) NOT NULL', | |
'user_id' => Schema::TYPE_INTEGER . ' NOT NULL', | |
'created_at' => Schema::TYPE_INTEGER, | |
'PRIMARY KEY (item_name, user_id)', | |
'FOREIGN KEY (item_name) REFERENCES ' . $authManager->itemTable . ' (name) ON DELETE CASCADE ON UPDATE CASCADE', | |
'FOREIGN KEY (user_id) REFERENCES {{%backend_user}} (id) ON DELETE RESTRICT ON UPDATE RESTRICT', | |
], $tableOptions); | |
$role = $authManager->createRole($authManager->superRoleName); | |
$role->description = $authManager->superRoleDescription; | |
$authManager->add($role); | |
$authManager->assign($role, 1); | |
} | |
public function down() | |
{ | |
$authManager = $this->getAuthManager(); | |
$this->dropTable($authManager->assignmentTable); | |
$this->dropTable($authManager->itemChildTable); | |
$this->dropTable($authManager->itemTable); | |
$this->dropTable($authManager->ruleTable); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment