diff --git a/wire/core/Role.php b/wire/core/Role.php index 892081a3..298b7e7f 100644 --- a/wire/core/Role.php +++ b/wire/core/Role.php @@ -108,6 +108,13 @@ class Role extends Page { if(!ctype_alnum(str_replace('-', '', $name))) { $name = $this->wire()->sanitizer->pageName($name); } + if($context) { + $method = $permissions->getDelegatedMethod($name, $context); + if($method) { + // non-installed permission delegates to a method call such as $page->editable() + return $context->$method(); + } + } $delegated = $permissions->getDelegatedPermissions(); if(isset($delegated[$name])) $name = $delegated[$name]; } @@ -243,4 +250,3 @@ class Role extends Page { } } - diff --git a/wire/core/User.php b/wire/core/User.php index 84f29a01..2f8c2884 100644 --- a/wire/core/User.php +++ b/wire/core/User.php @@ -261,6 +261,10 @@ class User extends Page { // code later on will make sure they exist in the template's addRoles/createRoles $p = 'page-edit'; } else if(!$permissions->has($name)) { + if($page) { + $method = $permissions->getDelegatedMethod($name, $page); + if($method) return $page->$method(); // i.e. $page->editable() + } $delegated = $permissions->getDelegatedPermissions(); $p = isset($delegated[$name]) ? $delegated[$name] : $name; } else {