Страница запрещена, даже если пользователь авторизован в laravel 5.7 - PullRequest
0 голосов
/ 30 ноября 2018

Я использую laravel 5.7 Gate и политики для авторизации сайта.Я сделал это следующим образом, но страница запрещена, даже если у пользователя есть разрешение в таблице ролей.в моей системе у меня есть 3 основных роли: супер администратор, администратор, гость.Они имеют разные разрешения, как прикрепленное изображение. Роли и разрешения .Пожалуйста, помогите мне исправить это.

web.php

Route::get('/users', 'UserController@index')->name('users')->middleware('can:view-user');

AuthServiceProvide.php

public function boot()
{
    $this->registerPolicies();
    $this->registerPostPolicies();   
}

public function registerPostPolicies()
{
    Gate::define('view-user', function($user){
        $user->hasAccess(['view-user']);
    });

    Gate::define('activate-user', function($user){
        $user->hasAccess(['activate-user']);
    });
}

Ролевая модель

public function hasAccess(array $permissions)
{
    foreach($permissions as $permission){
        if($this->hasPermission($permission)){
            return true;
            echo("<script>console.log('PHP: ".$permissions."');</script>");
        }
    }
    return false;
}

protected function hasPermission(string $permission){
    $permissions = json_decode($this->permissions,true);
    return $permissions[$permission]??false;

}   

Роли и функция hasAction в пользовательской модели

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

public function hasAccess(array $permissions)
{
   foreach($this->roles as $role){
        if($role->hasAccess($permissions)){
            return true;
        }
   }
   return false;
}

Ролевая сеялка

use Illuminate\Database\Seeder;
Use App\Role;
class rolerSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $super_admin = Role::create([
            'name'        => 'Super Admin',
            'slug'        => 'super admin',
            'permissions' => json_encode([
                'create-user' => true,
                'update-user' => true,
                'update-user' => true,
                'activate-user' => true,
                'view-user'  => true,

            ]),
        ]);
        $admin = Role::create([
            'name'        => 'Admin',
            'slug'        => 'admin',
            'permissions' => json_encode([
                'view-user'  => true,
            ]),
        ]);

        $guest = Role::create([
            'name'        => 'Guest',
            'slug'        => 'guest',
            'permissions' => json_encode([
                'view-user'  => true,
            ]),
        ]);
    }
}

И код написан, как показано ниже в уроке ссылка на урок

...