gpt4 book ai didi

php - laravel 5 的角色,如何只允许管理员访问某些根

转载 作者:可可西里 更新时间:2023-11-01 12:45:26 25 4
gpt4 key购买 nike

我遵循本教程:https://www.youtube.com/watch?v=kmJYVhG6UzM目前,如果用户是管理员,我可以检查我的 Blade :

{{ Auth::user()->roles->toArray()[0]['role'] }}
HI ADMIN
@endif

如何让我的路线只对管理员用户可用?

最佳答案

您需要为您的路由创建一个中间件。

使用:php artisan make:middleware AdminMiddleware

您会在您的中间件文件夹中找到一个同名的新文件。

把你的逻辑放在你的中间件中,例如

public function handle($request, Closure $next)
{
if(Auth::check())
{
return $next($request);
}
else
{
return view('auth.login')->withErrors('You are not logged in');
}

}

在中间件中完成逻辑后,您可以在路由中调用它或使中间件应用于所有路由。

如果你想将它添加到所有路由中,转到Kernel.php并将它添加到$middleware数组中,例如

protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\AdminMiddleware',
];

如果只想将其添加到特定路由,请将其添加到 $routeMiddleware 变量并将别名添加到路由。例如

protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'admin' => 'App\Http\Middleware\AdminMiddleware',
];

然后您可以将其作为过滤器添加到路由中,例如

Route::get('admin/profile', ['middleware' => 'admin', function()
{

}]);

有关更多信息,请访问文档:

http://laravel.com/docs/master/middleware

编辑

对此的改进是使用 PHP 5.6 中引入的可变参数函数

http://php.net/manual/en/migration56.new-features.php

您不必为每个权限集制作一个中间件,您可以执行以下操作

权限中间件

namespace App\Http\Middleware;

use Closure;
use \App\Models\Role;
class PermissionMiddleware
{
// Pass parameters to this middleware
public function handle($request, Closure $next, ...$permitted_roles)
{

//Get a users role
$role = new Role;
$role_name = $role->getUserRoleByName();
foreach($permitted_roles as $permitted_role) {
if($permitted_role == $role_name) {
return $next($request);
}
}
return redirect()->back()->withErrors('You do not have the required permission');

}
}

注意 ...$permitted_roles

Route::get('admin/profile', ['middleware' => 'PermissionMiddleware:Admin,Marketing', function()
{

}]);

您现在可以根据需要为一个中间件指定尽可能多的角色,而不是使用中间件参数创建多个

文档 https://laravel.com/docs/5.3/middleware#middleware-parameters

关于php - laravel 5 的角色,如何只允许管理员访问某些根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com