Pimcore\Model\Object\AbstractObject\Dao::getPermissions PHP Метод

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

public getPermissions ( $type, $user, $quote = true )
    public function getPermissions($type, $user, $quote = true)
    {
        $parentIds = $this->collectParentIds();
        $userIds = $user->getRoles();
        $userIds[] = $user->getId();
        try {
            if ($type && $quote) {
                $queryType = "`" . $type . "`";
            } else {
                $queryType = "*";
            }
            $commaSeparated = in_array($type, ["lView", "lEdit", "layouts"]);
            if ($commaSeparated) {
                $allPermissions = $this->db->fetchAll("SELECT " . $queryType . ",cid,cpath FROM users_workspaces_object WHERE cid IN (" . implode(",", $parentIds) . ") AND userId IN (" . implode(",", $userIds) . ") ORDER BY LENGTH(cpath) DESC");
                if (!$allPermissions) {
                    return null;
                } elseif (count($allPermissions) == 1) {
                    return $allPermissions[0];
                } else {
                    $firstPermission = $allPermissions[0];
                    $firstPermissionCid = $firstPermission["cid"];
                    $mergedPermissions = [];
                    foreach ($allPermissions as $permission) {
                        $cid = $permission["cid"];
                        if ($cid != $firstPermissionCid) {
                            break;
                        }
                        $permissionValues = $permission[$type];
                        if (!$permissionValues) {
                            $firstPermission[$type] = null;
                            return $firstPermission;
                        }
                        $permissionValues = explode(",", $permissionValues);
                        foreach ($permissionValues as $permissionValue) {
                            $mergedPermissions[$permissionValue] = $permissionValue;
                        }
                    }
                    $firstPermission[$type] = implode(',', $mergedPermissions);
                    return $firstPermission;
                }
            } else {
                $permissions = $this->db->fetchRow("SELECT " . $queryType . " FROM users_workspaces_object WHERE cid IN (" . implode(",", $parentIds) . ") AND userId IN (" . implode(",", $userIds) . ") ORDER BY LENGTH(cpath) DESC  LIMIT 1");
                return $permissions;
            }
        } catch (\Exception $e) {
            Logger::warn("Unable to get permission " . $type . " for object " . $this->model->getId());
        }
    }