Is there a possiblity to use Gate authorization without making use of user auth service?
For example I want to define a Gate:
Gate::define('morning', function(){ return date('H') < 12; });
When I do Gate::allows('morning')
or in the controller $this->authorize('morning')
is returning always false because there is no user logged in.
How can I make this work for just guest users?
Advertisement
Answer
Although there may be better solutions like using middleware
or using abort
helper function:
abort_if(date('H') < 12, 403, 'This action is unauthorized.');
But there is solution for policies by declaring an “optional” type-hint or supplying a null default value for the user argument definition:
class DatePolicy { /** * Determine if it's morning now! * * @param AppUser $user * @return bool */ public function morning(?User $user) { return date('H') < 12; } }
It may work for gates too but I haven’t test this:
Gate::define('morning', function ($user = null) { return date('H') < 12; });