User.php
45 lines
| 1 | <?php |
| 2 | |
| 3 | namespace Kirki\App\Wordpress; |
| 4 | |
| 5 | use Kirki\App\Supports\Role; |
| 6 | use function Kirki\Framework\collection; |
| 7 | |
| 8 | defined('ABSPATH') || exit; |
| 9 | |
| 10 | use Kirki\App\Constants\AccessLevels; |
| 11 | |
| 12 | class User extends \Kirki\Framework\Wordpress\User |
| 13 | { |
| 14 | /** |
| 15 | * Check if the current user has specific access |
| 16 | * |
| 17 | * @param string|string[] $access_level The access level to check access. |
| 18 | * |
| 19 | * @return bool |
| 20 | */ |
| 21 | public function has_access($access_level) |
| 22 | { |
| 23 | if (!$this->is_logged_in()) { |
| 24 | return false; |
| 25 | } |
| 26 | |
| 27 | $roles = $this->get_roles(); |
| 28 | |
| 29 | $available_levels_by_roles = array_values(Role::get_access_levels_by_roles($roles)); |
| 30 | |
| 31 | if (is_string($access_level)) { |
| 32 | return in_array($access_level, $available_levels_by_roles, true); |
| 33 | } |
| 34 | |
| 35 | return collection($access_level)->some(fn($level) => in_array($level, $available_levels_by_roles, true)); |
| 36 | } |
| 37 | |
| 38 | public function has_edit_access() |
| 39 | { |
| 40 | return $this->has_access([ |
| 41 | AccessLevels::FULL_ACCESS, |
| 42 | AccessLevels::CONTENT_ACCESS, |
| 43 | ]); |
| 44 | } |
| 45 | } |