public function update(UpdateEventArgs $eventArgs) { //Check update permissions $document = $eventArgs->getDocument(); $actions = []; foreach ($eventArgs->getChangeSet()->getFieldNames() as $field) { $actions[] = Actions::update($field); } if ($this->getAccessController()->areAllowed($actions, $eventArgs->getMetadata(), $document)->getAllowed()) { return; } $eventArgs->setReject(true); $eventArgs->getEventManager()->dispatchEvent(AccessControlEvents::UPDATE_DENIED, new EventArgs($document, 'update')); }
/** * * @param \Zoop\Shard\Core\UpdateEventArgs $eventArgs * @return type */ public function update(UpdateEventArgs $eventArgs) { $document = $eventArgs->getDocument(); $freezer = $this->getFreezer(); $metadata = $eventArgs->getMetadata(); if (!$freezer->getFreezeField($metadata) || !$freezer->isFrozen($document, $metadata)) { return; } $freezeMetadata = $metadata->getFreeze(); $changeSet = $eventArgs->getChangeSet(); $count = 0; array_walk($freezeMetadata, function ($item) use($changeSet, &$count) { if ($changeSet->hasField($item)) { ++$count; } }); if (count($changeSet->getFieldNames()) == $count) { return; } // Updates to frozen models are not allowed. Roll them back $eventArgs->setReject(true); // Raise frozenUpdateDenied $eventArgs->getEventManager()->dispatchEvent(Events::FROZEN_UPDATE_DENIED, new AccessControlEventArgs($document, 'update')); }