【问题标题】:Jetstream profile page does not link to spatie roles and permissions laravel 8Jetstream 个人资料页面未链接到 spatie 角色和权限 laravel 8
【发布时间】: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

【问题讨论】:

    标签: laravel profile jetstream


    【解决方案1】:

    我已经找到了解决方案,并在下面解释。

    我已经能够验证配置文件的默认路径是: /用户/个人资料/在我的情况下,我所做的不是将其与任何用户个人资料相关联,因为据了解,任何用户都可以编辑他们的个人资料。

    所以不需要创建任何角色或权限,在路径部分也不需要,所以我唯一需要修改的是这个文件:

    我的项目\供应商\laravel\jetstream\routes\livewire.php

    之前

     Route::group(['middleware' => ['auth', 'verified']], function () {
        // User & Profile...
        Route::get('/user/profile', [UserProfileController::class, 'show'])
                    ->name('profile.show');
    

    之后

      Route::group(['middleware' => ['auth', 'verified']], function () {
            // User & Profile...
            Route::get('/admin/perfil', [UserProfileController::class, 'show'])
                        ->name('profile.show');
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2022-12-02
      • 2020-09-11
      • 2021-12-11
      • 2022-10-17
      • 2020-11-01
      • 2021-05-29
      • 1970-01-01
      • 2014-07-22
      相关资源
      最近更新 更多