【发布时间】:2022-01-07 10:13:46
【问题描述】:
Jetstream 个人资料页面未链接到 spatie laravel 8 角色和权限
我为登录和用户系统配置了 Jetstream,并为权限和角色配置了 Spatie。
登录系统工作正常,我有几个页面是用 spatie 权限和角色管理的。
个人资料页面出现问题,即使我已将 spatie 角色的访问权限授予“管理员”和“用户”角色,但只有管理员用户可以访问。
下面我把部分代码作为例子和这个问题最相关的:
用户控制器
use DB;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Arr;
use Spatie\Permission\Models\Role;
class UserController extends Controller
{
public function __construct()
{
$this->middleware('can:admin.user.index');
}
...
public function destroy($id)
{
if( Auth::user()->hasPermissionTo('admin.user.destroy') ) {
$post = User::whereIn('id', $ids)->delete();
}
}
public function profile()
{
return view('admin.profile');
}
}
路线
Route::resource('users', 'App\Http\Controllers\Admin\\UserController')->names('admin.users');
Route::group(['middleware' => ['role:Administrador|Usuario']], function () {
Route::get('/perfil','App\Http\Controllers\Admin\\UserController@profile')->name('admin.profile');
Route::get('/user/profile', function () {return redirect('/admin/perfil');});
});
在 spatie 文档中它说你必须在内核中添加:
protected $routeMiddleware = [
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
]
我已经创建了 RoleSeeder
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$role_admin = Role::create(['name' => 'Administrador']);
$role_user = Role::create(['name' => 'Usuario']);
Permission::create(['name' => 'admin.user.index', 'description' => 'Ver Listado Usuarios'])->assignRole($role_admin);
Permission::create(['name' => 'admin.user.destroy', 'description' => 'Eliminar Usuarios'])->assignRole($role_admin);
Permission::create(['name' => 'profile.show', 'description' => 'Ver Perfil'])->syncRoles([$role_admin, $role_user]);
}
}
admin.profile.blade
@section('content')
<x-app-layout>
<x-slot name="header">
<h2 class="h4 font-weight-bold">
{{ __('Perfil') }}
</h2>
</x-slot>
<div>
@if (Laravel\Fortify\Features::canUpdateProfileInformation())
@livewire('profile.update-profile-information-form')
<x-jet-section-border />
@endif
@if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::updatePasswords()))
@livewire('profile.update-password-form')
<x-jet-section-border />
@endif
@if (Laravel\Fortify\Features::canManageTwoFactorAuthentication())
@livewire('profile.two-factor-authentication-form')
<x-jet-section-border />
@endif
@livewire('profile.logout-other-browser-sessions-form')
@if (Laravel\Jetstream\Jetstream::hasAccountDeletionFeatures())
<x-jet-section-border />
@livewire('profile.delete-user-form')
@endif
</div>
</x-app-layout>
@stop
【问题讨论】: