Browse Source

RBAC: Item and Assignment optimized save approach

tags/2.0.0-alpha
Alexander Kochetov 12 years ago
parent
commit
af3f5af3be
  1. 1
      tests/unit/framework/rbac/ManagerTestBase.php
  2. 10
      yii/rbac/Assignment.php
  3. 16
      yii/rbac/Item.php

1
tests/unit/framework/rbac/ManagerTestBase.php

@ -57,6 +57,7 @@ abstract class ManagerTestBase extends TestCase
$this->assertTrue($item instanceof Item); $this->assertTrue($item instanceof Item);
$this->assertTrue($this->auth->hasItemChild('reader', 'readPost')); $this->assertTrue($this->auth->hasItemChild('reader', 'readPost'));
$item->name = 'readPost2'; $item->name = 'readPost2';
$item->save();
$this->assertNull($this->auth->getItem('readPost')); $this->assertNull($this->auth->getItem('readPost'));
$this->assertEquals($this->auth->getItem('readPost2'), $item); $this->assertEquals($this->auth->getItem('readPost2'), $item);
$this->assertFalse($this->auth->hasItemChild('reader', 'readPost')); $this->assertFalse($this->auth->hasItemChild('reader', 'readPost'));

10
yii/rbac/Assignment.php

@ -81,7 +81,6 @@ class Assignment extends Object
{ {
if ($this->_bizRule !== $value) { if ($this->_bizRule !== $value) {
$this->_bizRule = $value; $this->_bizRule = $value;
$this->_auth->saveAssignment($this);
} }
} }
@ -100,7 +99,14 @@ class Assignment extends Object
{ {
if ($this->_data !== $value) { if ($this->_data !== $value) {
$this->_data = $value; $this->_data = $value;
$this->_auth->saveAssignment($this);
} }
} }
/**
* Saves the changes to an authorization assignment.
*/
public function save()
{
$this->_auth->saveAssignment($this);
}
} }

16
yii/rbac/Item.php

@ -39,6 +39,7 @@ class Item extends Object
private $_auth; private $_auth;
private $_type; private $_type;
private $_name; private $_name;
private $_oldName;
private $_description; private $_description;
private $_bizRule; private $_bizRule;
private $_data; private $_data;
@ -116,9 +117,8 @@ class Item extends Object
public function setName($value) public function setName($value)
{ {
if ($this->_name !== $value) { if ($this->_name !== $value) {
$oldName = $this->_name; $this->_oldName = $this->_name;
$this->_name = $value; $this->_name = $value;
$this->_auth->saveItem($this, $oldName);
} }
} }
@ -137,7 +137,6 @@ class Item extends Object
{ {
if ($this->_description !== $value) { if ($this->_description !== $value) {
$this->_description = $value; $this->_description = $value;
$this->_auth->saveItem($this);
} }
} }
@ -156,7 +155,6 @@ class Item extends Object
{ {
if ($this->_bizRule !== $value) { if ($this->_bizRule !== $value) {
$this->_bizRule = $value; $this->_bizRule = $value;
$this->_auth->saveItem($this);
} }
} }
@ -175,7 +173,6 @@ class Item extends Object
{ {
if ($this->_data !== $value) { if ($this->_data !== $value) {
$this->_data = $value; $this->_data = $value;
$this->_auth->saveItem($this);
} }
} }
@ -272,4 +269,13 @@ class Item extends Object
{ {
return $this->_auth->getAssignment($userId, $this->_name); return $this->_auth->getAssignment($userId, $this->_name);
} }
/**
* Saves an authorization item to persistent storage.
*/
public function save()
{
$this->_auth->saveItem($this, $this->_oldName);
unset($this->_oldName);
}
} }

Loading…
Cancel
Save