I even tried to regenerate this policies with artisan make. No effect
Policies autoloading in 5.3 upgraded from 5.2
Upgraded from 5.2 to 5.3-RC1, did changes explained in upgrade guide but still have problem with policies
ErrorException in ClassLoader.php line 412:
include(/home/vagrant/app): failed to open stream: Success
in ClassLoader.php line 412
at HandleExceptions->handleError('2', 'include(/home/vagrant/app): failed to open stream: Success', '/home/vagrant/app/vendor/composer/ClassLoader.php', '412', array('file' => '/home/vagrant/app/vendor/composer/../..')) in ClassLoader.php line 412
at include() in ClassLoader.php line 412
at Composer\Autoload\includeFile('/home/vagrant/app/vendor/composer/../..') in ClassLoader.php line 301
at ClassLoader->loadClass('Depl\Policies\UserPolicy')
at spl_autoload_call('Depl\Policies\UserPolicy')
at ReflectionClass->__construct('Depl\Policies\UserPolicy') in Container.php line 734
at Container->build('Depl\Policies\UserPolicy', array()) in Container.php line 629
at Container->make('Depl\Policies\UserPolicy', array()) in Application.php line 699
at Application->make('Depl\Policies\UserPolicy') in Gate.php line 415
at Gate->resolvePolicy('Depl\Policies\UserPolicy') in Gate.php line 404
at Gate->getPolicyFor('Depl\User') in Gate.php line 356
at Gate->Illuminate\Auth\Access{closure}(object(User), object(User)) in Gate.php line 265
at Gate->callAuthCallback(object(User), 'view', array(object(User))) in Gate.php line 243
at Gate->raw('view', array(object(User))) in Gate.php line 218
at Gate->authorize('view', object(User)) in AuthorizesRequests.php line 22
at Controller->authorize('view', object(User)) in AppController.php line 43
at AppController->index(object(Request), object(User), '84edf4da-4821-410a-9a80-cbb5b986af66')
at call_user_func_array(array(object(AppController), 'index'), array(object(Request), object(User), 'user' => '84edf4da-4821-410a-9a80-cbb5b986af66')) in Controller.php line 52
at Controller->callAction('index', array(object(Request), object(User), 'user' => '84edf4da-4821-410a-9a80-cbb5b986af66')) in ControllerDispatcher.php line 44
at ControllerDispatcher->dispatch(object(Route), object(AppController), 'index') in Route.php line 189
at Route->runController() in Route.php line 144
at Route->run(object(Request)) in Router.php line 642
at Router->Illuminate\Routing{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing{closure}(object(Request)) in Authenticate.php line 28
at Authenticate->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in AddHttp2ServerPush.php line 30
at AddHttp2ServerPush->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in VerifyCsrfToken.php line 64
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in SetLastLogin.php line 24
at SetLastLogin->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in StartSession.php line 64
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Router.php line 644
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 618
at Router->dispatchToRoute(object(Request)) in Router.php line 596
at Router->dispatch(object(Request)) in Kernel.php line 263
at Kernel->Illuminate\Foundation\Http{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing{closure}(object(Request)) in Debugbar.php line 49
at Debugbar->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 53
Little explanation: /home/vagrant/app is project root directory and Depl is app namespace (it is because i have model named App)
First i checked that autoloader is correct and there is string from autoload_classmap.php
'Depl\\Policies\\UserPolicy' => $baseDir . '/app/Policies/UserPolicy.php',
There is my AuthServiceProvider
<?php
namespace Depl\Providers;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'Depl\User' => 'Depl\Policies\UserPolicy',
// ....
];
/**
* Register any application authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
}
}
There is UserPolicy
<?php
namespace Depl\Policies;
use Illuminate\Auth\Access\HandlesAuthorization;
use Depl\User;
/**
* Class UserPolicy
*
* @package Depl\Policies
*/
class UserPolicy extends DefaultPolicy
{
use HandlesAuthorization;
/**
* Create a new policy instance.
*/
public function __construct()
{
//
}
/**
* Determine if the given user can view given user.
*
* @param User $current Current logged user
* @param User $user User to view
*
* @return bool
*/
public function view(User $current, User $user)
{
return ($user->id == $current->id);
}
// .....
}
And how i checking this in cintroller
public function index(Request $request, User $user)
{
$this->authorize('view', $user);
// ....
}
Any ideas?
I have finally found whats going on
Problem was that router does not bind models. This is because in 5.3 there is nwe middleware added to Kernel.php - \Illuminate\Routing\Middleware\SubstituteBindings::class, without it binding does not work.
I lost few days to figure out this
Please or to participate in this conversation.