FOF30\Model\DataModel\Behaviour\Access::onAfterLoad PHP Метод

onAfterLoad() публичный Метод

The event runs after DataModel has retrieved a single item from the database. It is used to apply automatic filters.
public onAfterLoad ( &$model, &$keys ) : void
Результат void
    public function onAfterLoad(&$model, &$keys)
    {
        // Make sure we have a DataModel
        if (!$model instanceof DataModel) {
            return;
        }
        // Make sure the field actually exists
        if (!$model->hasField('access')) {
            return;
        }
        // Get the user
        $user = $model->getContainer()->platform->getUser();
        $recordAccessLevel = $model->getFieldValue('access', null);
        // Filter by authorised access levels
        if (!in_array($recordAccessLevel, $user->getAuthorisedViewLevels())) {
            $model->reset(true);
        }
    }

Usage Example

Пример #1
0
 /**
  * @group           Behaviour
  * @group           AccessOnAfterLoad
  * @covers          FOF30\Model\DataModel\Behaviour\Access::onAfterLoad
  * @dataProvider    AccessDataprovider::getTestOnAfterLoad
  */
 public function testOnAfterLoad($test, $check)
 {
     $container = new TestContainer();
     $platform = $container->platform;
     $platform::$user = new ClosureHelper(array('getAuthorisedViewLevels' => function () use($test) {
         return $test['mock']['userAccess'];
     }));
     $config = array('idFieldName' => $test['tableid'], 'tableName' => $test['table']);
     $model = $this->getMock('FOF30\\Tests\\Stubs\\Model\\DataModelStub', array('reset', 'getFieldValue'), array($container, $config));
     $model->expects($check['reset'] ? $this->once() : $this->never())->method('reset');
     $model->expects($this->any())->method('getFieldValue')->willReturn($test['mock']['access']);
     $query = \JFactory::getDbo()->getQuery(true)->select('*')->from('test');
     $dispatcher = $model->getBehavioursDispatcher();
     $filter = new Access($dispatcher);
     $filter->onAfterLoad($model, $query);
 }