Browse Source

Fixed RBAC migraction to work on Oracle

Fixes #13513
tags/2.0.12
SilverFire - Dmitry Naumenko 8 years ago
parent
commit
2504ab72f2
No known key found for this signature in database
GPG Key ID: 39DD917A92B270A
  1. 1
      framework/CHANGELOG.md
  2. 41
      framework/rbac/migrations/m140506_102106_rbac_init.php

1
framework/CHANGELOG.md

@ -9,6 +9,7 @@ Yii Framework 2 Change Log
- Enh #13278: `yii\caching\DbQueryDependency` created allowing specification of the cache dependency via `yii\db\QueryInterface` (klimov-paul)
- Bug #11230: Include `defaultRoles` in `yii\rbac\DbManager->getRolesByUser()` results (developeruz)
- Bug #11404: `yii\base\Model::loadMultiple()` returns true even if `yii\base\Model::load()` returns false (zvook)
- Bug #13513: Fixed RBAC migration to work correctly on Oracle DBMS (silverfire)
2.0.11.2 February 08, 2017

41
framework/rbac/migrations/m140506_102106_rbac_init.php

@ -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';
}
}

Loading…
Cancel
Save