/** * * @param \Zoop\Shard\Annotation\AnnotationEventArgs $eventArgs */ public function annotationState(AnnotationEventArgs $eventArgs) { $field = $eventArgs->getReflection()->getName(); $metadata = $eventArgs->getMetadata(); $eventManager = $eventArgs->getEventManager(); $metadata->addProperty('state', true); $metadata->setState([$field => $eventArgs->getAnnotation()->value]); //Add sythentic annotation to create extra permission that will allow //updates on the state field when access control is enabled. $permissionAnnotation = new Shard\Permission\Basic(['roles' => BasicPermission::WILD, 'allow' => Actions::update($field)]); // Raise annotation event $eventManager->dispatchEvent($permissionAnnotation::EVENT, new AnnotationEventArgs($metadata, EventType::DOCUMENT, $permissionAnnotation, $metadata->getReflectionClass(), $eventManager)); }
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\Annotation\AnnotationEventArgs $eventArgs */ public function annotationFreeze(AnnotationEventArgs $eventArgs) { $field = $eventArgs->getReflection()->getName(); $metadata = $eventArgs->getMetadata(); $eventManager = $eventArgs->getEventManager(); $freezeMetadata = $this->getFreezeMetadata($metadata); $freezeMetadata['flag'] = $field; $metadata->setFreeze($freezeMetadata); //Add sythentic annotation to create extra permission that will allow //updates on the freeze field when access control is enabled. $permissionAnnotation = new Shard\Permission\Basic(['roles' => BasicPermission::WILD, 'allow' => Actions::update($field)]); // Raise annotation event $eventManager->dispatchEvent($permissionAnnotation::EVENT, new AnnotationEventArgs($metadata, EventType::DOCUMENT, $permissionAnnotation, $metadata->getReflectionClass(), $eventManager)); }