【发布时间】: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()->user_type != "admin") { return redirect()->to('/'); }但是更完整的解决方案是使用 authorisation to write gates or policies -
您可以创建中间件并限制网络路由。 laravel.com/docs/8.x/middleware
-
上述两个 cmets 都是不错的选择,我想补充一点,您可以添加各种 laravel 角色权限库。他们为您完成上述所有工作,您可以简单地使用他们的方法、中间件等。