получить имя целевого пользователя в соответствии с ролью - PullRequest
0 голосов
/ 19 июня 2019

я управляю моими зарегистрированными пользователями ... теперь я хочу увидеть, у какого пользователя есть какое разрешение в соответствии с его / его ролью. Я хочу показать разрешения в поле и заставить их проверить, есть ли у пользователя эта роль. проблема заключается в разрешении целевого пользователя в соответствии с его ролью

мой контроллер для просмотра разрешения целевого пользователя:

 public function view(Request $request, User $user){

        $roles = Role::with('permissions')->get();
        $permissions = Permission::get();
        return view('adminarea.roles.view', compact('roles','user', 'permissions'));
    }

Файл Blade:

    @foreach ( $permissions as $per )

<div class="custom-control custom-checkbox">

        <input type="checkbox" class="custom-control-input" name="permissions_ids[]" id="permissions"
            value="{{ $per->id }}" style="margin-right:5px" @if (?)
        checked="true"
        @endif>

        <label class="custom-control-label" for="permissions">{{ $per->name }}</label>
    </div>


    @endforeach

Модельные отношения:

Ролевая таблица:

public function users()
{
    return $this
        ->belongsToMany('App\User')
        ->withTimestamps();
}



public function permissions()
{
    return $this->belongsToMany(Permission::class, 'roles_permissions');
}

Таблица разрешений:

public function roles()
{
    return $this->belongsToMany(Role::class, 'roles_permissions');
}

Таблица пользователей:

   public function roles()
    {
        return $this->belongsToMany(Role::class, 'users_roles');
    }

Структура таблицы :

это моя схема role_permission:

Schema::create('roles_permissions', function (Blueprint $table) {
        $table->unsignedBigInteger('role_id');
        $table->unsignedBigInteger('permission_id');

        //FOREIGN KEY CONSTRAINTS
        $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
        $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');

        //SETTING THE PRIMARY KEYS
        $table->primary(['role_id', 'permission_id']);
    });

и схема users_role:

 Schema::create('users_roles', function (Blueprint $table) {
        $table->unsignedBigInteger('user_id');
        $table->unsignedBigInteger('role_id');

        //FOREIGN KEY CONSTRAINTS
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');

        //SETTING THE PRIMARY KEYS
        $table->primary(['user_id', 'role_id']);
    });

таблица разрешений:

  Schema::create('permissions', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('description');
        $table->timestamps();
    });

и схема таблицы ролей:

   Schema::create('roles', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('description');
            $table->timestamps();
        });

1 Ответ

0 голосов
/ 19 июня 2019

Здесь вы можете использовать политики Laravel.

Создайте политику для своих пользователей.

Затем создайте функции, такие как canViewPosts, canAddPosts, canSeeViews и т. Д., И в каждой проверке, есть ли у пользователя разрешение на это.

Пример UserPolicy

public function canView(User $user){
   return $user->permissions->canView; //given you have permissions relation on user
}

Тогда в вашем PostController вы идете как

$this->authorize('canView', User::class);

Проверьте больше здесь: https://laravel.com/docs/5.8/authorization#introduction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...