laravel 5的角色,如何仅允许管理员访问某些root用户

弗拉基米尔·朱基奇

我遵循此教程:https : //www.youtube.com/watch?v=kmJYVhG6UzM当前,我可以检查刀片服务器是否用户是管理员:

{{ 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/zh/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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建可以在Laravel 5中注册非管理员用户帐户的管理员用户帐户?

保护管理员和用户路由laravel 5

如何根据laravel-8中的选择更改迁移表中的角色管理员或用户?

如何在Laravel中进行用户管理员

管理员在 Laravel 中创建用户

Laravel 5.4 管理员和用户角色中间件

Laravel Voyager:仅当用户为管理员时才能看到菜单项

Laravel 范围查询仅适用于用户 - 排除管理员的结果

如何允许Laravel管理员用户像我网站上的任何其他用户一样模拟或认证?

只允许管理员查看Laravel中的页面

仅允许管理员用户访问Resque Web界面

仅允许管理员用户访问文件夹

Laravel 5如果用户是管理员,则选择所有记录

使用 laravel hesto / multiauth 限制对管理员的访问

Laravel管理员图像无法通过URL访问

如何使我的仪表板仅对 Laravel 中的管理员和卖家可访问?

Laravel 从管理员向特定用户发出备注通知

如果用户在Laravel中被锁定,通知管理员

Laravel - 将管理员用户路由到子域

Laravel:使用 isAdmin 列检查用户是否是管理员?

如何只显示laravel用户表中的管理员名称

如何在laravel刀片视图中检查用户是否为管理员

Laravel:如何区分普通用户、版主和管理员

如何使用Laravel和jwt-auth保护非管理员用户的api路由

如何使按钮在Laravel中对管理员类型的用户可见一次?

Laravel不允许为某些用户角色重置密码

Laravel后端管理员-单独安装Laravel还是仅使用一个Laravel安装?

Laravel 5类管理员不存在

允许管理员角色查看“解析”中的某些页面