diff --git a/CHANGELOG.md b/CHANGELOG.md index 10215f68..270564df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ * [](#improved) * Improved `permissions` field * Added `field.show_label` and `field.label` display logic from frontend forms + * DEPRECATED `onAdminRegisterPermissions` event, use `RegisterPermissionsEvent::class` event instead + * DEPRECATED `Admin::setPermissions()` and `Admin::addPermissions()`, use `RegisterPermissionsEvent::class` event instead + * DEPRECATED `Admin::getPermissions()`, use `$grav['permissions']->getInstances()` instead 1. [](#bugfix) * Fixed user profile when using `Flex Users` only in admin diff --git a/admin.php b/admin.php index 78f8ad73..e17b9610 100644 --- a/admin.php +++ b/admin.php @@ -734,40 +734,6 @@ class AdminPlugin extends Plugin $permissions->addActions($actions); } - /** - * Initial stab at registering permissions (WIP) - * - * @param Event $e - */ - public function onAdminRegisterPermissions(Event $e) - { - $grav = Grav::instance(); - $grav['permissions']; - - /** @var Admin $admin */ - $admin = $e['admin']; - $permissions = [ - 'site.login' => 'boolean', - 'admin.login' => 'boolean', - 'admin.super' => 'boolean', - 'admin.cache' => 'boolean', - 'admin.configuration' => 'boolean', - 'admin.configuration_system' => 'boolean', - 'admin.configuration_site' => 'boolean', - 'admin.configuration_media' => 'boolean', - 'admin.configuration_info' => 'boolean', - 'admin.settings' => 'boolean', - 'admin.pages' => 'boolean', - 'admin.maintenance' => 'boolean', - 'admin.statistics' => 'boolean', - 'admin.plugins' => 'boolean', - 'admin.themes' => 'boolean', - 'admin.tools' => 'boolean', - 'admin.users' => 'boolean', - ]; - $admin->addPermissions($permissions); - } - public function onAdminMenu() { // Dashboard @@ -930,7 +896,6 @@ class AdminPlugin extends Plugin 'onTwigTemplatePaths' => ['onTwigTemplatePaths', 1000], 'onTwigSiteVariables' => ['onTwigSiteVariables', 1000], 'onAssetsInitialized' => ['onAssetsInitialized', 1000], - 'onAdminRegisterPermissions' => ['onAdminRegisterPermissions', 0], 'onOutputGenerated' => ['onOutputGenerated', 0], 'onAdminAfterSave' => ['onAdminAfterSave', 0], 'onAdminData' => ['onAdminData', 0], diff --git a/classes/plugin/Admin.php b/classes/plugin/Admin.php index 546511fd..bfd54926 100644 --- a/classes/plugin/Admin.php +++ b/classes/plugin/Admin.php @@ -25,6 +25,8 @@ use Grav\Common\Uri; use Grav\Common\User\Interfaces\UserCollectionInterface; use Grav\Common\User\User; use Grav\Common\Utils; +use Grav\Framework\Acl\Action; +use Grav\Framework\Acl\Permissions; use Grav\Framework\Collection\ArrayCollection; use Grav\Framework\Flex\Flex; use Grav\Framework\Flex\Interfaces\FlexObjectInterface; @@ -104,9 +106,6 @@ class Admin /** @var int */ protected $pages_count; - /** @var array */ - protected $permissions; - /** @var bool */ protected $load_additional_files_in_background = false; @@ -136,7 +135,6 @@ class Admin $this->uri = $grav['uri']; $this->session = $grav['session']; $this->user = $grav['user']; - $this->permissions = []; /** @var Language $language */ $language = $grav['language']; @@ -1430,30 +1428,51 @@ class Admin * Gets the entire permissions array * * @return array + * @deprecated 1.10 Use $grav['permissions']->getInstances() instead. */ public function getPermissions() { - return $this->permissions; + user_error(__METHOD__ . '() is deprecated since Admin 1.10, use $grav[\'permissions\']->getInstances() instead', E_USER_DEPRECATED); + + $grav = $this->grav; + /** @var Permissions $object */ + $permissions = $grav['permissions']; + + return array_fill_keys(array_keys($permissions->getInstances()), 'boolean'); } /** * Sets the entire permissions array * * @param array $permissions + * @deprecated 1.10 Use RegisterPermissionsEvent::class event instead. */ public function setPermissions($permissions) { - $this->permissions = $permissions; + user_error(__METHOD__ . '() is deprecated since Admin 1.10, use RegisterPermissionsEvent::class event instead', E_USER_DEPRECATED); + + $this->addPermissions($permissions); } /** * Adds a permission to the permissions array * * @param array $permissions + * @deprecated 1.10 Use RegisterPermissionsEvent::class event instead. */ public function addPermissions($permissions) { - $this->permissions = array_merge($this->permissions, $permissions); + user_error(__METHOD__ . '() is deprecated since Admin 1.10, use RegisterPermissionsEvent::class event instead', E_USER_DEPRECATED); + + $grav = $this->grav; + /** @var Permissions $object */ + $object = $grav['permissions']; + foreach ($permissions as $name => $type) { + if (!$object->hasAction($name)) { + $action = new Action($name); + $object->addAction($action); + } + } } public function getNotifications($force = false)