(string $user)
| 861 | } |
| 862 | |
| 863 | private static function userHasAnyExplicitAccess(string $user): bool |
| 864 | { |
| 865 | $user = (string)$user; |
| 866 | if ($user === '') { |
| 867 | return false; |
| 868 | } |
| 869 | |
| 870 | $memoKey = self::memoScope() . '|__any__|' . strtolower($user); |
| 871 | if (array_key_exists($memoKey, self::$memo)) { |
| 872 | return self::$memo[$memoKey]; |
| 873 | } |
| 874 | |
| 875 | $acl = self::$cache ?? self::loadFresh(); |
| 876 | $folders = $acl['folders'] ?? []; |
| 877 | if (is_array($folders)) { |
| 878 | foreach ($folders as $folder => $rec) { |
| 879 | if (!is_array($rec)) { |
| 880 | continue; |
| 881 | } |
| 882 | if (self::hasAnyExplicitEntry($user, (string)$folder)) { |
| 883 | return self::$memo[$memoKey] = true; |
| 884 | } |
| 885 | } |
| 886 | } |
| 887 | |
| 888 | if (self::userHasAnyGroupGrant($user)) { |
| 889 | return self::$memo[$memoKey] = true; |
| 890 | } |
| 891 | |
| 892 | return self::$memo[$memoKey] = false; |
| 893 | } |
| 894 | |
| 895 | private static function userHasAnyGroupGrant(string $user): bool |
| 896 | { |
no test coverage detected