Laravel 5.5 权限 - 用户没有正确的角色
Laravel 5.5 Permissions - User does not have the right roles
我试图在管理员用户没有指定角色的用例中找到解决方案。
在仪表板视图中,它不会为用户呈现 url,而如果我直接访问 dashboard/users,我会得到:
Spatie \ Permission \ Exceptions \ UnauthorizedException
user does not have the right roles
app/Http/Kernel.php
protected $routeMiddleware = [
....
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
];
routes/web.php
Route::group(
['middleware' => ['role:admin']],
function () {
Route::get('/dashboard/users', 'UsersController@index');
Route::get('/dashboard/users/{id}', 'UsersController@edit');
Route::patch('/dashboard/users/{id}', 'UsersController@update');
}
);
view/dashboard.blade.php
<div class="panel-body">
@hasrole('admin')
<li><a href="/dashboard/users">Manage Users</a></li>
@endhasrole
</div>
我已经通过
成功生成了默认角色和权限
Commands/GenerateRoles.php
public function handle()
{
$this->info('Generating default roles and permissions...');
$admin = User::create(
[
'name' => 'administrator',
'email' => 'adm@mail.com',
'password' => bcrypt('12345'),
]
);
// Create roles.
$adminRole = Role::create(['name' => 'admin']);
$supportRole = Role::create(['name' => 'support']);
$admin->assignRole('admin');
// Create permissions.
$userManagement = Permission::create(['name' => 'users management']);
$deleteImages = Permission::create(['name' => 'delete images']);
$datasetStatus = Permission::create(
['name' => 'change dataset building status']
);
$adminRole->givePermissionTo($userManagement);
$deleteImages->syncRoles([$adminRole, $supportRole]);
$datasetStatus->syncRoles([$adminRole, $supportRole]);
}
它可能出了什么问题?谢谢你的时间。
你应该覆盖渲染方法来重定向(或任何你想做的)。转到 Expections/Handler.php 并像这样覆盖渲染函数:
public function render($request, Exception $exception)
{
if ($exception instanceof \Spatie\Permission\Exceptions\UnauthorizedException) {
return redirect('/');
}
return parent::render($request, $exception);
}
来源:https://github.com/spatie/laravel-permission#catching-role-and-permission-failures
我试图在管理员用户没有指定角色的用例中找到解决方案。 在仪表板视图中,它不会为用户呈现 url,而如果我直接访问 dashboard/users,我会得到:
Spatie \ Permission \ Exceptions \ UnauthorizedException
user does not have the right roles
app/Http/Kernel.php
protected $routeMiddleware = [
....
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
];
routes/web.php
Route::group(
['middleware' => ['role:admin']],
function () {
Route::get('/dashboard/users', 'UsersController@index');
Route::get('/dashboard/users/{id}', 'UsersController@edit');
Route::patch('/dashboard/users/{id}', 'UsersController@update');
}
);
view/dashboard.blade.php
<div class="panel-body">
@hasrole('admin')
<li><a href="/dashboard/users">Manage Users</a></li>
@endhasrole
</div>
我已经通过
成功生成了默认角色和权限Commands/GenerateRoles.php
public function handle()
{
$this->info('Generating default roles and permissions...');
$admin = User::create(
[
'name' => 'administrator',
'email' => 'adm@mail.com',
'password' => bcrypt('12345'),
]
);
// Create roles.
$adminRole = Role::create(['name' => 'admin']);
$supportRole = Role::create(['name' => 'support']);
$admin->assignRole('admin');
// Create permissions.
$userManagement = Permission::create(['name' => 'users management']);
$deleteImages = Permission::create(['name' => 'delete images']);
$datasetStatus = Permission::create(
['name' => 'change dataset building status']
);
$adminRole->givePermissionTo($userManagement);
$deleteImages->syncRoles([$adminRole, $supportRole]);
$datasetStatus->syncRoles([$adminRole, $supportRole]);
}
它可能出了什么问题?谢谢你的时间。
你应该覆盖渲染方法来重定向(或任何你想做的)。转到 Expections/Handler.php 并像这样覆盖渲染函数:
public function render($request, Exception $exception)
{
if ($exception instanceof \Spatie\Permission\Exceptions\UnauthorizedException) {
return redirect('/');
}
return parent::render($request, $exception);
}
来源:https://github.com/spatie/laravel-permission#catching-role-and-permission-failures