$kirby->impersonate()
Become any existing user or disable the current user
$kirby->impersonate(string $who = null, Closure $callback = null): mixed
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| $who | string |
null |
User ID or email address,null to use the actual user again,'kirby' for a virtual admin user or'nobody' to disable the actual user |
| $callback | Closure |
null |
Optional action function that will be run with the permissions of the impersonated user; the impersonation will be reset afterwards |
Return type
mixed
Exceptions
| Type | Description |
|---|---|
Throwable |
Parent class
$who
There are four options for the $who parameter:
- a username (impersonates the specific user with their permissions)
'kirby'(impersonates the allmighty user with full permissions)'nobody'(disables the currently logged in user, added in Kirby 3.5.0)null(resets the impersonation)
Example
<?php
$kirby = kirby();
$kirby->impersonate('kirby');
page('notes/a-great-article')->update([
'author' => 'Homer Simpson'
]);
The impersonation will be active for all code that runs in the current request after the call to $kirby->impersonate(). If you want to limit the impact to a single operation, call the method with a callback (see below).
Since 3.4.0
With callback
If you only want a single operation to run with different privileges, use a callback:
<?php
$kirby = kirby();
$result = $kirby->impersonate('kirby', function () {
page('notes/a-great-article')->update([
'author' => 'Homer Simpson'
]);
return 'this will be returned to $result above';
});
The impersonation automatically gets reset to the previous value after the callback returns.