如何在laravel中禁用特定用户的URL?

时间:2017-03-20 05:44:55

标签: php laravel-5.2 laravel-middleware

我有一个管理员表,其中包含idadmin_typename等一些列。此处我有两种admin_type:一种是“admin”另一个是“hod”。

现在的问题是,我希望使用(admin_type == "admin")登录的管理员能够访问所有管理网址,但是admin_type == "hod"我希望限制用户可以访问的网址。

我使用的是Laravel 5.2。任何人都可以帮我解决这个问题吗?

例如,如果admin_type=="hod"的用户访问这些链接

www.example.com/admin/add-user
www.example.com/admin/edit-user
www.example.com/admin/add-customer
www.example.com/admin/edit-customer

以及更多网址,我想展示一些消息,例如**You have no rights to access this link **

这是我的数据库结构:

enter image description here

1 个答案:

答案 0 :(得分:1)

我会为这样一个用例实现Middleware。只需在Laravel工作目录中执行php artisan make:midldeware yourNameHere,artisan就会为您生成相应的中间件类。

然后你需要这样的代码。如果用户不是管理员,那么这是一个简单的if条件,其中403中止。

class AdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->user()->admin_type != 'admin') {
            return abort(403, "No access here, sorry!");
        }

        return $next($request);
    }
}

你的路线档案(routes / web.php):

...
Route::group(["middleware" => 'admin'], function () {
       //Your admin routes should be declared here
});
...