|
|
|
@ -37,6 +37,11 @@ class m140506_102106_rbac_init extends \yii\db\Migration
|
|
|
|
|
return $this->db->driverName === 'mssql' || $this->db->driverName === 'sqlsrv' || $this->db->driverName === 'dblib'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected function isPgSQL() |
|
|
|
|
{ |
|
|
|
|
return $this->db->driverName === 'oci'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @inheritdoc |
|
|
|
|
*/ |
|
|
|
@ -56,7 +61,7 @@ class m140506_102106_rbac_init extends \yii\db\Migration
|
|
|
|
|
'data' => $this->binary(), |
|
|
|
|
'created_at' => $this->integer(), |
|
|
|
|
'updated_at' => $this->integer(), |
|
|
|
|
'PRIMARY KEY (name)', |
|
|
|
|
'PRIMARY KEY ([[name]])', |
|
|
|
|
], $tableOptions); |
|
|
|
|
|
|
|
|
|
$this->createTable($authManager->itemTable, [ |
|
|
|
@ -67,28 +72,29 @@ class m140506_102106_rbac_init extends \yii\db\Migration
|
|
|
|
|
'data' => $this->binary(), |
|
|
|
|
'created_at' => $this->integer(), |
|
|
|
|
'updated_at' => $this->integer(), |
|
|
|
|
'PRIMARY KEY (name)', |
|
|
|
|
'FOREIGN KEY (rule_name) REFERENCES ' . $authManager->ruleTable . ' (name)'. |
|
|
|
|
($this->isMSSQL() ? '' : ' ON DELETE SET NULL ON UPDATE CASCADE'), |
|
|
|
|
'PRIMARY KEY ([[name]])', |
|
|
|
|
'FOREIGN KEY ([[rule_name]]) REFERENCES ' . $authManager->ruleTable . ' ([[name]])'. |
|
|
|
|
$this->buildFkClause() |
|
|
|
|
], $tableOptions); |
|
|
|
|
$this->createIndex('idx-auth_item-type', $authManager->itemTable, 'type'); |
|
|
|
|
|
|
|
|
|
$this->createTable($authManager->itemChildTable, [ |
|
|
|
|
'parent' => $this->string(64)->notNull(), |
|
|
|
|
'child' => $this->string(64)->notNull(), |
|
|
|
|
'PRIMARY KEY (parent, child)', |
|
|
|
|
'FOREIGN KEY (parent) REFERENCES ' . $authManager->itemTable . ' (name)'. |
|
|
|
|
($this->isMSSQL() ? '' : ' ON DELETE CASCADE ON UPDATE CASCADE'), |
|
|
|
|
'FOREIGN KEY (child) REFERENCES ' . $authManager->itemTable . ' (name)'. |
|
|
|
|
($this->isMSSQL() ? '' : ' ON DELETE CASCADE ON UPDATE CASCADE'), |
|
|
|
|
'PRIMARY KEY ([[parent]], [[child]])', |
|
|
|
|
'FOREIGN KEY ([[parent]]) REFERENCES ' . $authManager->itemTable . ' ([[name]])'. |
|
|
|
|
$this->buildFkClause(), |
|
|
|
|
'FOREIGN KEY ([[child]]) REFERENCES ' . $authManager->itemTable . ' ([[name]])'. |
|
|
|
|
$this->buildFkClause(), |
|
|
|
|
], $tableOptions); |
|
|
|
|
|
|
|
|
|
$this->createTable($authManager->assignmentTable, [ |
|
|
|
|
'item_name' => $this->string(64)->notNull(), |
|
|
|
|
'user_id' => $this->string(64)->notNull(), |
|
|
|
|
'created_at' => $this->integer(), |
|
|
|
|
'PRIMARY KEY (item_name, user_id)', |
|
|
|
|
'FOREIGN KEY (item_name) REFERENCES ' . $authManager->itemTable . ' (name) ON DELETE CASCADE ON UPDATE CASCADE', |
|
|
|
|
'PRIMARY KEY ([[item_name]], [[user_id]])', |
|
|
|
|
'FOREIGN KEY ([[item_name]]) REFERENCES ' . $authManager->itemTable . ' ([[name]])' . |
|
|
|
|
$this->buildFkClause(), |
|
|
|
|
], $tableOptions); |
|
|
|
|
|
|
|
|
|
if ($this->isMSSQL()) { |
|
|
|
@ -146,4 +152,17 @@ class m140506_102106_rbac_init extends \yii\db\Migration
|
|
|
|
|
$this->dropTable($authManager->itemTable); |
|
|
|
|
$this->dropTable($authManager->ruleTable); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected function buildFkClause() |
|
|
|
|
{ |
|
|
|
|
if ($this->isMSSQL()) { |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($this->isPgSQL()) { |
|
|
|
|
return ' ON DELETE SET NULL'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ' ON DELETE SET NULL ON UPDATE CASCADE'; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|