【问题标题】:how to disable the url for specific user in laravel?如何在 laravel 中禁用特定用户的 url?
【发布时间】:2019-06-12 03:16:48
【问题描述】:

我有一个管理员表,其中有一些列,如idadmin_typename 等。这里我有两种类型的admin_type:一种是“admin”,另一种是“hod”。

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

我正在使用 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

还有更多 URL,我想显示一些消息,例如 **You have no rights to access this link **

这是我的数据库结构:

【问题讨论】:

  • 你试过什么? the built-in authorization services 怎么了?
  • 另外,请阅读the markdown help,了解如何在此处正确格式化帖子。
  • @EdCottrell 您发送的链接基于 laravel 提供的身份验证组件,但我已经使用核心编码完成了登录注册
  • 我不确定您所说的“核心编码”是什么意思,但同样,您尝试过什么?有很多合理的方法可以做你想要完成的事情。
  • 我的核心编码意味着我没有为管理端实现身份验证组件我已经为用户端实现了身份验证组件。我的问题是您发送的链接适用于我用于管理方面的简单视图

标签: php laravel-5.2 laravel-middleware


【解决方案1】:

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

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

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
});
...

【讨论】:

  • 你错过了一件事。您尚未在 kernel.php 中将 admin 定义为别名
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 2015-09-22
  • 2015-05-24
  • 1970-01-01
相关资源
最近更新 更多