Is there a possiblity to use Gate authorization without making use of user auth service?
For example I want to define a Gate:
JavaScript
x
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:
JavaScript
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:
JavaScript
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:
JavaScript
Gate::define('morning', function ($user = null) {
return date('H') < 12;
});