Я использую 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,
]),
]);
}
}
И код написан, как показано ниже в уроке ссылка на урок