src/EventListener/TabPermissionEventListener.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Pimcore\Db;
  4. use Pimcore\Event\Model\DataObjectEvent;
  5. use Pimcore\Event\Model\ElementEventInterface;
  6. use Pimcore\Model\User\Permission\Definition as Permission;
  7. class TabPermissionEventListener
  8. {
  9.     public function onPostUpdate(ElementEventInterface $e)
  10.     {
  11.         if (
  12.             $e instanceof DataObjectEvent &&
  13.             method_exists($e->getObject(), 'getCLassName') &&
  14.             !empty($e->getObject()->getCLassName()) &&
  15.             strtolower($e->getObject()->getCLassName()) == 'tab'
  16.         ) {
  17.             $obj $e->getObject();
  18.             if ($obj->getPermission()) {
  19.                 $permissionKey $obj->getPermission();
  20.                 // check if permission is available
  21.                 $permission Permission::getByKey($permissionKey);
  22.                 if (!$permission) {
  23.                     $permission = new Permission();
  24.                     $permission->setKey($permissionKey);
  25.                     $permission->setCategory('Tab');
  26.                     $permission->save();
  27.                 }
  28.             }
  29.         }
  30.     }
  31.     /**
  32.      * @var \Pimcore\Model\DataObject\Menu $obj
  33.      */
  34.     public function onPostDelete(ElementEventInterface $e)
  35.     {
  36.         if (
  37.             $e instanceof DataObjectEvent &&
  38.             method_exists($e->getObject(), 'getClassName') &&
  39.             $e->getObject() instanceof \Pimcore\Model\DataObject\Menu
  40.         ) {
  41.             $obj $e->getObject();
  42.             $permissions $obj->getPermissions_();
  43.             if (count($permissions) > 0) {
  44.                 $menuId $obj->getId();
  45.                 foreach ($permissions as $permission) {
  46.                     $permissionName $permission->getName();
  47.                     $permissionKey $menuId '|' $permissionName;
  48.                     if (Permission::getByKey($permissionKey)) {
  49.                         $roles = new \Pimcore\Model\User\Role\Listing();
  50.                         if (count($roles) > 0) {
  51.                             foreach ($roles as $role) {
  52.                                 $permissions $role->getPermissions();
  53.                                 if (($key array_search($permissionKey$permissions)) !== false) {
  54.                                     unset($permissions[$key]);
  55.                                 }
  56.                                 $role->setPermissions($permissions);
  57.                                 $role->save();
  58.                             }
  59.                         }
  60.     
  61.                         $users = new \Pimcore\Model\User\Listing();
  62.                         if (count($users) > 0) {
  63.                             foreach ($users as $user) {
  64.                                 $permissions $user->getPermissions();
  65.                                 if (($key array_search($permissionKey$permissions)) !== false) {
  66.                                     unset($permissions[$key]);
  67.                                 }
  68.                                 $user->setPermissions($permissions);
  69.                                 $user->save();
  70.                             }
  71.                         }
  72.                         $sql "DELETE FROM users_permission_definitions WHERE `key` = :permission";
  73.                         $stmt Db::get()->prepare($sql);
  74.                         $stmt->bindParam('permission'$permissionKey\PDO::PARAM_STR);
  75.                         $stmt->execute();
  76.                     }
  77.                 }
  78.             }
  79.         }
  80.     }
  81. }