【问题标题】:How to differentiate between normal and admin user in Laravel 8?如何区分 Laravel 8 中的普通用户和管理员用户?
【发布时间】:2021-07-08 05:57:35
【问题描述】:

我对 MVC 和 Laravel 8 还很陌生,我通过运行相关的 Auth 命令添加了用户注册/登录,Laravel 相应地添加了用户数据库和注册和登录页面。一切正常。

在此之后,我在迁移中添加了一个 user_type 字段,一个包含用户和管理员的枚举字段,然后我创建了一个 AdminController 及其单独的视图,当我执行 /admin 时一切正常,我得到了管理员视图,我还添加了路由并对其进行保护,以便用户必须先登录才能查看管理员。

我面临的唯一问题是任何已登录的用户都可以查看管理员。如何限制 user_type = 'admin' 的用户只能查看管理区域?

现在我正在通过在管理布局视图顶部添加以下代码来进行破解:

    @if (Auth::user()->user_type != "admin")
        <script>
            window.location = "./";
        </script>
    @endif

这可行,但它是一个黑客,如果任何禁用 javascript 的人都可以进入。

P.S:我在 PHPMyAdmin 中手动将用户的 user_type 字段设置为“admin”。

感谢任何帮助。

提前致谢。

【问题讨论】:

  • 简单的解决方案是在您的路线操作中移动检查,例如if (Auth::user()-&gt;user_type != "admin") { return redirect()-&gt;to('/'); } 但是更完整的解决方案是使用 authorisation to write gates or policies
  • 您可以创建中间件并限制网络路由。 laravel.com/docs/8.x/middleware
  • 上述两个 cmets 都是不错的选择,我想补充一点,您可以添加各种 laravel 角色权限库。他们为您完成上述所有工作,您可以简单地使用他们的方法、中间件等。

标签: php mysql laravel


【解决方案1】:

身份验证和授权的多种可能性。

  1. 护照包composer require laravel/passport
  2. 尽管包composer require spatie/laravel-permission
  3. Policies
  4. 自定义中间件

还有更多,但在市场上很有名

【讨论】:

  • 您能否为每个选项提供一个链接,也许可以解释一下每个选项如何解决/解决问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
相关资源
最近更新 更多