From def389356e392f61605647b4814174fb7a6cf8a5 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Thu, 29 Jul 2021 23:09:25 +0300 Subject: [PATCH] Added `UserObject::$authorizeCallable` to allow `$user->authorize()` customization --- CHANGELOG.md | 1 + .../src/Grav/Common/Flex/Types/Users/UserObject.php | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f30e33f5d..2bc2c9dfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ 1. [](#new) * Include active form and request in `onPageTask` and `onPageAction` events (defaults to `null`) + * Added `UserObject::$authorizeCallable` to allow `$user->authorize()` customization 1. [](#improved) * Added meta support for `UploadedFile` class * Add `setCurrent()` method to Page Collection [#3398](https://github.com/getgrav/grav/pull/3398) diff --git a/system/src/Grav/Common/Flex/Types/Users/UserObject.php b/system/src/Grav/Common/Flex/Types/Users/UserObject.php index 62305cd8d..82b9f7c4f 100644 --- a/system/src/Grav/Common/Flex/Types/Users/UserObject.php +++ b/system/src/Grav/Common/Flex/Types/Users/UserObject.php @@ -11,6 +11,7 @@ declare(strict_types=1); namespace Grav\Common\Flex\Types\Users; +use Closure; use Countable; use Grav\Common\Config\Config; use Grav\Common\Data\Blueprint; @@ -75,6 +76,9 @@ class UserObject extends FlexObject implements UserInterface, Countable use UserTrait; use UserObjectLegacyTrait; + /** @var Closure|null */ + static public $authorizeCallable; + /** @var array|null */ protected $_uploads_original; /** @var FileInterface|null */ @@ -259,6 +263,15 @@ class UserObject extends FlexObject implements UserInterface, Countable } } + $authorizeCallable = static::$authorizeCallable; + if ($authorizeCallable instanceof Closure) { + $authorizeCallable->bindTo($this); + $authorized = $authorizeCallable($action, $scope); + if (is_bool($authorized)) { + return $authorized; + } + } + // Check user access. $access = $this->getAccess(); $authorized = $access->authorize($action, $scope);